老问题标题:如何在父UIViews(如HUD层)中捕获事件?
我正在尝试使用UI框架而不是cocos2d编写游戏。
我想让View分部的所有事件都得到妥善处理。这似乎不可能。
关于部分视图,我指的是RubyonRails(和其他语言)允许您在表示层(视图代码)的较大部分中显示小块表示层(查看代码)的方式。
游戏有一个HUD层,上面有分数(和其他元数据),我使用
[self.view addSubview:y]
或[self.navigationController push...]
从视觉上看,它会是这样的(不按比例):
+----------------------------+
|A |
|+--------+ +------------+ |
||B | |C | |
|| | | | |
|+--------+ | | |
| | | |
| +------------+ |
+----------------------------+
- 部分A具有与主菜单相关的按钮(主导航)
- B部分有分数等按钮
- C区是主要游戏区
部分A和部分B都是HUD层,它们意味着在需要的地方有可点击的事件。
我不想一遍又一遍地重复相同的代码,所以我觉得在窗口中包含我想要的视图的HUD系统应该是实现这一目标的最佳方式。
我遇到的问题是,如果我在任何其他View控制器中包含我的HUD.h/HUD.m文件,我就不能再接受C部分中A或B部分的点击,我也不能让它执行事件操作,因为它总是抱怨C部分中不存在该方法。
如果我在Section C视图中,我应该接受来自A和B的点击,并适当地处理它们。
因此,通过HUD分层系统捕获事件并适当处理事件的最佳方式是什么?
我见过的最接近的可能是使用touchesBegan,但我不清楚如何将touchesBegin事件链接到A/B部分控制器中的事件。
谢谢。
我不能100%确定这是你所问的,但如果你说你想要发生在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的基础视图。
我决定测试几个不同的想法来使用cocos2d,因为这将是一件好事,可以添加到我的技能中。
已关闭。