我试图在我的应用中实现容器视图控制器设计。但是有人告诉我,我需要支持iOS 4.3设备,因此iOS 5中引入的官方视图控制器API目前不是一个选项。
为了达到类似的行为,我使用了黑客。调整了我的RootViewController的视图,并为其添加了一个子视图,使其超出了视图的范围。例如:RootView的边界为0,0,320,480。现在我将其重新调整为0,0,320,430并包含一个0,430,320,60的子视图。这是有效的,因为我使用ApplicationFrame进行所有计算,为我提供稳定的帧。但我现在面临的问题是超出视图范围的子视图没有接收到触摸事件。 maskToBounds = NO
属性可以帮助我显示。但接触?有谁知道怎么做?
答案 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)。
我们已经完成了!