2009-11-17 58 views
0

Louis - 感谢您的输入。这是我所做的,以及我目前的问题,我不明白。iPhone图层管理 - 最佳实践

菜单(2)是响应触摸的UIImageView。每个人都是自己的班级。你称之为“精灵”也会对触摸做出反应。

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

我使用spriteContainer上方的menuContainer对它们进行了排序。现在,精灵在菜单下方移动 - 非常棒!但在这个过程中,精灵停止响应触摸(我可以理解,因为它们在menuContainer层下面),并且菜单也停止响应触摸(不明白)。继续混淆这种情况,添加到menuContainer中的图层通过弹出滑块来响应多点触控手势,但仍会读取多点触控并弹出滑块,但我无法滑动滑块。这使我彻底混淆了。

谢谢。

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

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

我已经尝试插入图层与插入:下面:,但是这并没有给我想要的结果。

感谢您的帮助。

+1

这是一个很好的问题。我也想知道为什么苹果公司不仅仅以Z坐标属性的形式包含Z排序机制。 – Amagrammer

+1

假设你正在讨论CoreAnimation-Layers,你会发现实际上有一个zPosition属性,另外还有一个可自由调整的CATransform3D。但是,这些属性都只考虑到了兄弟姐妹。因此,如果您需要完整的3D对象/动画,CoreAnimation不可用。插入的次序是计算哪个图层在另一个图层上绘制的。 – Till

+0

实际上,如果您在CATransformLayer中放置了一堆图层,则可以复制一些非常复杂的3-D效果。唯一真正的限制,3-D明智的是,CALayers必须是矩形的。 –

回答

2

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

该值不能大于在 所述子层的数组元素的计数时 。

我认为你会得到最好的服务,但实际上是制作一个真正的图层层次结构,而不是试图将所有活动图层合并到一个超级图层中。在其他的,但是你的所有媒体到一个容器层,然后插入到你想要的根层。同样,将所有精灵插入到一个容器图层中,然后将其放入所需的根目录层。

根据您的编辑附加的东西:

层是一个基本的图形结构,它们不直接响应事件。你或者需要通过编写代码来自己处理它们,或者你需要使用UIViews来代替图层。您之前可能已经开始使用它了,因为您是在以视图层次结构和图层层次结构一致的方式操纵图层,但从原始问题中我不清楚您是使用视图而不是纯粹基于图层建立。

+0

Louis,我从文档中的评论中想到了同样的事情,但是根据图层几何图形和在doc站点上转换页面:“zPosition属性指定图层位置的z轴分量.zPosition旨在成为用于设置图层相对于其兄弟图层的视觉位置,不应该用于指定图层兄弟的顺序,而是重新排列子图层中的图层的顺序。“这对我来说建议图层索引*是* z-次序。我已经写了一些代码来证实这一点,而且似乎是这样。 –

+0

我想我并不完全清楚。索引绝对决定什么显示什么,所以在某种意义上它是一个z-顺序。但它不是一个通用的z顺序,因为您不能将它们设置为任意值,并期望它们基于此顺序一致排列,因此插入其他图层时各个图层的索引将发生更改。 –

-1

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

菜单(2)是响应触摸的UIImageView。每个人都是自己的班级。 你称之为“精灵”也会对触摸做出反应。

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

我使用spriteContainer上方的menuContainer对它们进行了排序。现在,精灵在菜单下方移动 - 非常棒!但在这个过程中,精灵停止响应触摸(我可以理解,因为它们在menuContainer层下面),并且菜单也停止响应触摸(不明白)。继续混淆这种情况,添加到menuContainer中的图层通过弹出滑块来响应多点触控手势,但仍会读取多点触控并弹出滑块,但我无法滑动滑块。这使我彻底混淆了。

谢谢。

+0

这不是一个真正的答案;它应该是你的问题的编辑。 –