旧问题标题:如何捕获父UIViews中的事件,例如HUD图层?
我正在尝试使用UI框架而不是cocos2d编写游戏。
我想让View部分与所有事件处理得当。这似乎不可能。
通过部分视图,我指的是Ruby on Rails(和其他语言)允许你有一小部分表示层(视图代码)出现在表示层(视图代码)的较大部分中。< / p>
游戏有一个HUD层,顶部有分数(和其他元数据),我使用
[self.view addSubview:y]
或
[self.navigationController push...]
在视觉上,它会是这样的(不按比例):
+----------------------------+
|A |
|+--------+ +------------+ |
||B | |C | |
|| | | | |
|+--------+ | | |
| | | |
| +------------+ |
+----------------------------+
A部分和B部分都是HUD图层,它们意味着在需要时可以点击事件。
我不想一遍又一遍地重复相同的代码,所以我觉得我在窗口中包含我想要的视图的HUD系统应该是实现此目的的最佳方式。
我遇到的问题是,如果我在任何其他View控制器中包含我的HUD.h / HUD.m文件,我就不能再接受C部分A或B部分的点击,而我无法使其执行事件操作,因为它总是抱怨该方法在C节中不存在。
如果我在C部分视图中,我应该接受来自A和B的点击并适当地处理它们。
因此,通过HUD分层系统捕获事件的最佳方法是什么,并适当处理事件?
我见过的最接近的可能是使用touchesBegan,但我不清楚的是如何将touchesBegan事件链接到A / B部分控制器中的事件。
感谢。
答案 0 :(得分:0)
我不是百分之百确定这是你要问的,但是如果你说你想要在B或C部分发生的实际上没有碰到按钮的点击进入A部分,那么这里是你应该做什么: 创建UIView的子类,例如,HUDItemContainerView。 覆盖UIView的-hitTest:withEvent:方法如下:
- (UIView *)hitTest:(CGPoint)point
withEvent:(UIEvent *)event
{
UIView* touchedView = [super hitTest:point withEvent:event];
if (touchedView == self)
return nil;
return touchedView;
}
这为HUDItemContainerView添加了以下行为:“如果我内部的触摸触及我的某个子视图,请使用该触摸。如果它直接触及我(即不是我的某个子视图),则忽略触摸并允许其通过通过我身后的任何观点(例如A节)。“
然后使用HUDItemContainerView作为B部分和C部分的基本视图。
答案 1 :(得分:0)
我已经决定使用cocos2d测试了几个不同的想法,因为添加到我的技能组会是一件好事。
关闭。