iPhone层管理 - 最佳实践

时间:2009-11-17 22:19:21

标签: iphone core-animation calayer layer

路易斯 - 感谢您的投入。这就是我所做的,以及我目前的问题,我不明白。

菜单(2)是响应触摸的UIImageViews。每个人都是自己的班级。你所称的'精灵'也会对触摸产生反应。

在.m中我将菜单和精灵添加到图层中,我通过以下代码创建了两个容器图层:menuContainer = [CALayer图层]。

我用spriteContainer上面的menuContainer命令它们。现在,精灵确实在菜单下方移动 - 太棒了!但是在这个过程中,精灵停止响应触摸(我可以理解这一点,因为它们位于menuContainer层之下),菜单也停止响应触摸(不要那样)。继续混淆这种情况,添加到menuContainer的图层通过弹出滑块来响应多点触控手势仍然会读取多点触控并弹出滑块,但我无法滑动滑块。这让我彻底感到困惑。

感谢。

我的应用正在构建一个背景图层,然后构建一些应始终位于顶部的菜单图层。 在此之后,我添加了许多移动图层,并很快删除了许多移动图层。

我的问题是我希望我的菜单图层(有4个)始终位于其他图层的前面。我曾想过构建一个层层次结构并使用insertsublayer:atindex:方法,使我的菜单成为1000的名义索引,并将较多的移动层插入较低的索引,如200.如果我在200处插入一层,然后下一个是200,分配给200的第一层是否会被移位(到201)或者它会被吹走?

我尝试使用insertsublayer插入图层:下面:,但这并没有给我预期的结果。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

你不能真的这样做,图层索引不是z顺序,它是一个数组索引。来自documentation

  

此值不得为   大于中的元素数   子层数组。

我认为你会得到最好的服务,但实际上是建立一个真正的层次结构,而不是试图将所有活动层推入一个超级层。在其他方面,但是所有的menulayer都进入容器层,然后将其插入根层中您想要的位置。同样,将所有精灵插入一个容器图层,并将其放在您想要的根图层中。

基于您的修改的其他内容:

图层本质上是一种图形构造,它们不直接响应事件。您需要通过编写代码来自己处理它们,在它们所附加的视图中命中它们,或者您需要使用UIViews而不是图层。您之前可能已经开始使用它,因为您正在以一种视图层次结构和图层层次结构一致的方式操作图层,但我从您的原始问题中不清楚您使用的是视图而不是基于纯粹的图层设置。

答案 1 :(得分:-1)

路易斯 - 感谢您的输入。这就是我所做的,以及我目前的问题,我不明白。

菜单(2)是响应触摸的UIImageViews。每个人都是自己的班级。 你所称的'精灵'也会对触摸产生反应。

在.m中我将菜单和精灵添加到图层中,我通过以下代码创建了两个容器图层:menuContainer = [CALayer图层]。

我用spriteContainer上面的menuContainer命令它们。现在,精灵确实在菜单下方移动 - 太棒了!但是在这个过程中,精灵停止响应触摸(我可以理解这一点,因为它们位于menuContainer层之下),菜单也停止响应触摸(不要那样)。继续混淆这种情况,添加到menuContainer的图层通过弹出滑块来响应多点触控手势仍然会读取多点触控并弹出滑块,但我无法滑动滑块。这让我彻底感到困惑。

感谢。