iOS-实现超出父视图点击响应
来源:互联网 发布:北京软件招聘 编辑:程序博客网 时间:2024/05/17 22:28
关于这个问题,其实网上有很多技术博客给出了很好的方案,但是仍然有个别博客将有严重错误的结论挂在网上(例如),本文就该问题进行了严格的论证,希望能够帮到有需要的人。
错误结论:每次递归去调用hitTest:(CGPoint)point withEvent:(UIEvent *)event之前,都会调用pointInside:withEvent:来确定该触摸点是否在该View内。
正确结论:先调用hitTest:(CGPoint)point withEvent:(UIEvent *)event,而后调用pointInside:withEvent:。
那么点击超出父视图但在子视图的区域时,要想响应事件到底怎么处理最合理?
正确答案:
重写父视图方法- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { UIView *view = [super hitTest:point withEvent:event]; if (self.userInteractionEnabled == NO && self.alpha <= 0.01 && self.hidden == YES) { return nil; } if (view == nil) { for (UIView * subview in self.subviews.reverseObjectEnumerator) { CGPoint converP = [subview convertPoint:point fromView:self]; UIView *suitableView = [subview hitTest:converP withEvent:event]; if (suitableView) { return suitableView; } else { return view; } } } return view;}
相关知识:Hit-test view的应用
扩大UIButton的点击区域
- (BOOL)pointInside:(CGPoint)point withEvent:(nullable UIEvent *)event { return CGRectContainsPoint(HitTestingBounds(self.bounds, self.minimumHitTestWidth, self.minimumHitTestHeight), point);}CGRect HitTestingBounds(CGRect bounds, CGFloat minimumHitTestWidth, CGFloat minimumHitTestHeight) { CGRect hitTestingBounds = bounds; if (minimumHitTestWidth > bounds.size.width) { hitTestingBounds.size.width = minimumHitTestWidth; hitTestingBounds.origin.x -= (hitTestingBounds.size.width - bounds.size.width)/2; } if (minimumHitTestHeight > bounds.size.height) { hitTestingBounds.size.height = minimumHitTestHeight; hitTestingBounds.origin.y -= (hitTestingBounds.size.height - bounds.size.height)/2; } return hitTestingBounds;}
阅读全文
1 0
- iOS-实现超出父视图点击响应
- iOS 超出父视图不响应点击事件的解决方法
- 超出父视图的视图点击响应
- iOS -- 子视图超出父视图范围点击无法响应的问题
- iOS 子视图超出父视图范围 无法响应点击事件解决方案
- iOS中超出父视图的按钮点击事件响应处理
- 让超出父视图范围的子视图响应事件,在UIView范围外响应点击
- ios button超出父视图如何响应事件
- iOS button超出父视图时点击无法响应
- iOS UIButton超出父视图无法点击解决方法
- 关于子视图超出父视图后无法响应点击事件的处理办法
- 子视图超出父视图部分仍然响应点击事件的处理
- iOS 点击子视图不让其响应父视图手势
- pointInside 和 hitTest (超出父视图点击事件不响应解决办法)
- 如何让超出父视图区域的子视图实现点击事件
- ios 手势点击子视图的时候不响应父视图的点击事件
- ios 怎么禁止点击子视图的时候不响应父视图的点击事件
- 让超出父视图的子视图响应事件
- virtualenv 虚拟环境的使用
- Redux, Redux thunk 和 React Redux 源码阅读
- python3 HTMLTestRunner测试报告中文乱码
- GalaxyOJ-720 (dp)
- redis的安装和简单的使用
- iOS-实现超出父视图点击响应
- 11.React中文之构成vs继承
- 海量数据处理相关面试问题
- 数据科学入门—数据可视化
- 比较Oralce 数据库和 SQL Server 数据库
- Ceph架构剖析
- Bootstrap Table导出Excel
- Sass
- 《剑指offer》字符串的排列