4

目前,我有一个 UIView 子类,它在屏幕上“标记”单个 2px x 2px CGLayerRef,最多 160 x 240 次。

我目前通过将 UIView“向上”移动 2 个像素(实际上是 UIImageView)然后绘制下一个“行”来对此进行动画处理。

使用多个 CALayer 层会加快渲染此动画的性能吗?

是否有使用 CALayer 和 iPhone SDK 的教程、示例应用程序或代码片段?

我问的原因是,我发现的大多数演示 CALayer 简单示例的代码片段都使用了不适用于 iPhone SDK 的方法调用。我感谢任何建议或指示。

4

3 回答 3

4

好吧,如果你想要一些 CA good 的好例子,可以画出类似的东西并在手机上运行,​​我推荐 Jens Aflke 发布的GeekGameBoard代码(它是一些 Apple 演示代码的改进版本)。

根据您所描述的,我认为您正在做的事情比它需要的要复杂得多。我的印象是,您基本上想要一个静态视图,通过移动其位置使其部分离开屏幕来制作动画。如果您只需要在您的 drawRect 中设置一些静态内容,那么通过图层不会比使用您的颜色调用 CGFillRect() 更快。之后,您可以在 UIView 上使用隐式动画和动画代理来移动视图。我怀疑您甚至可以摆脱自定义 drawRect: 使用带有图案的 UIColor 的实现,但老实说,我还没有对两者之间的差异进行基准测试。

于 2008-11-03T12:20:38.997 回答
3

您看到哪些在 iPhone 上不起作用的 CALayer 方法?除了与 CoreImage 相关的动画功能外,我还没有注意到缺少多少。您可能会注意到的一件大事是所有视图都是图层支持的(因此您不需要做任何特殊的事情来使用图层,您可以通过图层访问器方法获取 UIView 的图层),并且坐标系有一个顶部左原点。

无论如何,通常拥有更多的东西比拥有更少的东西要慢。如果您只是一遍又一遍地重复相同的模式,您可能会发现最好的性能是实现一个知道如何绘制您想要的内容的自定义 UIView/CALayer/UIColor,而不是将视觉上相同的图层或视图彼此相邻放置.

话虽如此,通常层比视图更轻,所以如果你有很多单独的元素需要保持逻辑分离,你会发现移动到层可能比使用视图更胜一筹。

您可能想查看 -[UIColor initWithPatternImage:] ,具体取决于您要执行的操作。如果您使用这两个像素图案作为背景颜色,您可以制作一个 UIColor 来绘制它并设置背景。

于 2008-11-03T11:21:30.410 回答
1

您看到哪些在 iPhone 上不起作用的 CALayer 方法?

作为一个例子,我尝试在此处实现网格演示,但运气不佳。它看起来像CAConstraintLayoutManager并且CAConstraintQuartzCore.h.

在另一次尝试中,我尝试了一个非常简单的 20x20 小CALayer对象作为我UIView的 layer 属性的子层,但没有出现。

现在,我有一个习惯UIView,我覆盖了该drawRect方法。在drawRect我抓取一个上下文并渲染两种类型的CGLayerRefs:

在“关闭”单元格处,我在整个 320x480 画布上绘制背景颜色。

在“on”单元格CGLayerRef处,我在 320x480 像素的网格(初始化)或 320x2 的行(动画)上绘制一个。

在动画过程中,我UIImageView从 320x478 像素制作了一个剪辑视图,并绘制了一行。这一次将我的位图“推”到屏幕上两个像素。

基本上,我想测试 using 是否CALayer会完成两件事:

  1. 让我的渲染速度更快,如果CALayer开销比我现在做的少
  2. 让我在屏幕上平滑过渡一个图层,让我的动画更流畅

不幸的是,我目前似乎无法让基本的 CALayer 工作,也没有找到大量示例代码可供查看和使用。

于 2008-11-03T12:05:00.260 回答