ios 点击测试位于SuperView边界之外的UIButton

ujv3wf0j  于 11个月前  发布在  iOS
关注(0)|答案(2)|浏览(79)

我试图通过UIButton中的touchUpInside来动画这个视图ControlsViewUIButton是附加图像中白色正方形内的插入字符。当点击按钮时,一个委托方法被触发,controlsView被动画化。问题是因为UIButtoncontrolsView的边界之外,所以它没有接收触摸信息。
我已经考虑了很多,并阅读了一些潜在的候选解决方案。例如通过覆盖hitTest:withEvent:来检测超级视图上的触摸事件。然而,UIButton实际上是CockPitView的子视图,CockPitViewControlsView的子视图,ControlsViewMainView的子视图。似乎是主视图,是UIButton真正所在坐标的矩形。那么我是否应该覆盖hitTest,并将触摸信息传递给CockPitView,然后让Button触发其操作回调?
有没有人遇到过这个或类似的问题,并有任何关于如何进行的建议?


的数据

kh212irz

kh212irz1#

您应该在自定义视图CockPitView中覆盖hitTest

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{   
    if (!self.clipsToBounds && !self.hidden && self.alpha > 0) {
        for (UIView *subview in self.subviews.reverseObjectEnumerator) {
            CGPoint subPoint = [subview convertPoint:point fromView:self];
            UIView *result = [subview hitTest:subPoint withEvent:event];
            if (result != nil) {
                return result;
            }
        }
    }

    return nil;
}

字符串
CockPitView必须是UIView的子类

knsnq2tg

knsnq2tg2#

你可能想使用-pointInside:withEvent:。在你的button的超级视图中,也就是ControlsView,像这样覆盖这个方法:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    // self.button is the button outside the bounds of your ControlsView
    if (CGRectContainsPoint(self.button.bounds, [self convertPoint:point toView:self.button])) {
        return YES;
    }
    return [super pointInside:point withEvent:event];
}

字符串
通过这样做,ControlsView声明按钮边界内的点应该像ControlsView内的点一样对待。

相关问题