1

我试图在我的应用程序中实现容器视图控制器设计。但是我被告知我需要支持 iOS 4.3 设备,所以 iOS 5 中引入的官方视图控制器 API 目前不是一个选项。

为了实现类似的行为,我使用了 hack。为我的 RootViewController 调整了视图的大小,并向其添加了一个子视图,使其超出了视图的范围。例如:RootView 的边界为 0,0,320,480。现在我将它的大小调整为 0,0,320,430,并在 0,430,320,60 处包含一个子视图。这很有效,因为我使用 ApplicationFrame 进行所有计算,为我提供了可以工作的稳定框架。但是我现在面临的问题是超出视图范围的子视图没有接收到触摸事件。该maskToBounds = NO物业帮助我进行展示。但触动?有人知道该怎么做吗?

4

1 回答 1

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 的右侧面板中)。

我们完成了!

于 2013-06-26T01:40:06.327 回答