0

老问题标题:如何在父 UIView 中捕获事件,例如 HUD 图层?

我正在尝试使用 UI 框架而不是 cocos2d 编写游戏。

我想让 View partials 正确处理所有事件。这似乎不可能。

通过部分视图,我指的是 Ruby on Rails(和其他语言)允许您将一小块表示层(视图代码)显示在较大的表示层(视图代码)中的方式。

游戏有一个 HUD 层,顶部有分数(和其他元数据),我使用

[self.view addSubview:y]或者 [self.navigationController push...]

在视觉上,它会是这样的(不按比例):

+----------------------------+
|A                           |
|+--------+   +------------+ |
||B       |   |C           | |
||        |   |            | |
|+--------+   |            | |
|             |            | |
|             +------------+ |
+----------------------------+
  • A部分有与主菜单相关的按钮(主导航)
  • B部分有得分等按钮
  • C区是主要游戏区

Section A 和 Section B 都是 HUD 层,它们旨在在需要时具有可点击的事件。

我不想一遍又一遍地重复相同的代码,所以我觉得在窗口中包含我想要的视图的 HUD 系统应该是实现这一点的最佳方式。

我遇到的问题是,如果我在任何其他视图控制器中包含我的 HUD.h/HUD.m 文件,我将不再接受 C 部分中 A 或 B 部分的点击,并且我不能让它执行事件操作它总是抱怨 C 部分中不存在该方法。

如果我在 C 部分视图中,我应该接受来自 A 和 B 的点击并适当地处理它们。

因此,通过 HUD 分层系统捕获事件并适当处理事件的最佳方式是什么?

我见过的最接近的可能是使用 touchesBegan,但我不清楚的是如何将 touchesBegan 事件链接到 Section A/B 控制器中的事件。

谢谢。

4

2 回答 2

0

我不是 100% 确定这就是您要问的,但是如果您说您希望在 B 或 C 部分发生的点击实际上没有触摸按钮以通过 A 部分,那么您应该这样做do:创建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 用于 Section B 和 Section C 的基本视图。

于 2012-01-15T08:28:50.560 回答
0

我已经决定测试几个不同的想法来搭配 cocos2d,因为这将是一件好事,可以添加到我的技能中。

关闭。

于 2012-01-21T17:54:52.117 回答