假设我有一个处理一些 UIViews 的 UIViewController 子类。这些 UIView 被添加为 UIViewControllerview
属性的子视图):
UIViewController:
- (void)viewDidLoad {
UIImageView *smallImageView...
[self.view addSubview:smallImageView];
UIButton *button..
[self.view addSubview:button];
UIView *bigUIView.. // covers the entire screen (frame = (0.0, 0.0, 1024.0, 768.0))
[self.view addSubview:bigUIView];
...
}
AFAIK,因为bigUIView
是最前面的视图并且覆盖了整个屏幕,所以它将接收touchesBegan:withEvent:
和其他视图,例如button
不会接收任何触摸事件。
在我的应用程序bigUIView
中必须是最顶层的视图,因为它包含主要的用户界面对象(CALayers,实际上是主要的游戏对象),当动画时,它们必须位于所有其他次要 UI 元素(UIButtons 等)之上。但是,我希望仍然能够在响应者链中拥有 UIButtons 和其他对象。
我尝试在bigUIView
课堂上实现以下内容:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.superview touchesBegan:touches withEvent:event];
... hit test the touch for this specific uiview..
}
笔记:
bigUIView
的超级视图是指 UIViewController 的view
属性,它是否将触摸事件传播到它的所有子视图?bigUIView
必须有userInteractionEnabled = YES
,因为它还处理用户输入。- 我无法将
button
/smallImageView
放在前面,因为它会出现在主要游戏对象(的子层bigUIView
)上方。
提前致谢。