使用MaskToBounds NO触摸事件处理

时间:2013-06-26 01:13:52

标签: iphone ios uinavigationcontroller

我试图在我的应用中实现容器视图控制器设计。但是有人告诉我,我需要支持iOS 4.3设备,因此iOS 5中引入的官方视图控制器API目前不是一个选项。

为了达到类似的行为,我使用了黑客。调整了我的RootViewController的视图,并为其添加了一个子视图,使其超出了视图的范围。例如:RootView的边界为0,0,320,480。现在我将其重新调整为0,0,320,430并包含一个0,430,320,60的子视图。这是有效的,因为我使用ApplicationFrame进行所有计算,为我提供稳定的帧。但我现在面临的问题是超出视图范围的子视图没有接收到触摸事件。 maskToBounds = NO属性可以帮助我显示。但接触?有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

每当您希望子视图在这种情况下接收触摸事件时,您可以执行以下操作:

1-创建一个继承自UIView并覆盖hitTest:withEvent:的新类,以允许子视图拦截触摸:

@interface CustomView : UIView
@end

@implementation CustomView

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    /// Check if the point is inside the subview
    CGPoint newPoint = [subview convertPoint:point fromView:self];
    if ([subview pointInside:newPoint withEvent:event]) {
        /// Let the subview decide the return value
        return [subview hitTest:newPoint withEvent:event];
    }

    /// Default route
    return [super hitTest:point withEvent:event];
}

@end

2-将根视图的类更改为我们的CustomView(从Xcode中的右侧面板> Identity Inspector> Custom Class)。

我们已经完成了!