如何在目标C中生成视图分部



老问题标题:如何在父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,因为这将是一件好事,可以添加到我的技能中。

已关闭。

相关内容

  • 没有找到相关文章

最新更新