dug*_*gla 36 uiview hittest ios
我有一个简单 - 琐碎的 - UIView父/子层次结构.一位家长(UIView).一个孩子(UIButton).父母边界小于孩子的边界,因此孩子的一部分延伸到其父母的边界框之外.
这就是问题:父母的bbox之外的孩子的那些部分没有接触到.只有在父级的bbox内点击才允许子按钮接收触摸.
有人可以建议修复/解决方法吗?
对于那些关注这个问题的人,这里是我实施的@Bastians最优秀答案的解决方案:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
BOOL isInside = [super pointInside:point withEvent:event];
// identify the button view subclass
UIButton *b = (UIButton *)[self viewWithTag:3232];
CGPoint inButtonSpace = [self convertPoint:point toView:b];
BOOL isInsideButton = [b pointInside:inButtonSpace withEvent:nil];
if (isInsideButton) {
return isInsideButton;
} // if (YES == isInsideButton)
return isInside;
}
Run Code Online (Sandbox Code Playgroud)
Bas*_*ian 25
问题是响应者链.当你触摸显示屏时,它会从父母一直走到孩子身边.
所以..当你触摸屏幕时,父母会看到触摸超出了它自己的界限,所以孩子们甚至都不会问.
执行此操作的功能是hitTest.如果你有自己的UIView类,你可以覆盖它并自己返回按钮.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
Run Code Online (Sandbox Code Playgroud)
根据Apple\xe2\x80\x99s 自己的文档,我发现执行此操作的最简单、最可靠的方法是覆盖hitTest:withEvent:
在剪切视图的超类中进行重写,如下所示:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {\n\n // Convert the point to the target view\'s coordinate system.\n // The target view isn\'t necessarily the immediate subview\n CGPoint pointForTargetView = [self.targetView convertPoint:point fromView:self];\n\n if (CGRectContainsPoint(self.targetView.bounds, pointForTargetView)) {\n\n // The target view may have its view hierarchy,\n // so call its hitTest method to return the right hit-test view\n return [self.targetView hitTest:pointForTargetView withEvent:event];\n }\n\n return [super hitTest:point withEvent:event];\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
9465 次 |
最近记录: |