如何在Objective C中进行视图分割?

时间:2012-01-15 06:07:42

标签: objective-c uiviewcontroller event-handling partial-views hud

旧问题标题:如何捕获父UIViews中的事件,例如HUD图层?

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

我想让View部分与所有事件处理得当。这似乎不可能。

通过部分视图,我指的是Ruby on Rails(和其他语言)允许你有一小部分表示层(视图代码)出现在表示层(视图代码)的较大部分中。< / p>

游戏有一个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节中不存在。

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

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

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

感谢。

2 个答案:

答案 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测试了几个不同的想法,因为添加到我的技能组会是一件好事。

关闭。