2008-11-03 64 views
4

目前,我有一个UIView子类,在屏幕上“邮戳”一个2px x 2px的CGLayerRef,最多160 x 240次。如何在iPhone上使用CALayer?

我目前通过移动UIView“向上”屏幕2像素(实际上,一个UIImageView),然后绘制下一个“行”来设置动画效果。

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

是否有与iPhone SDK一起使用CALayer的教程,示例应用程序或代码片段?

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

回答

4

好的,好吧,如果你想要一些有很好的CA好例子来绘制这样的东西并在手机上工作,我推荐Jens Aflke发布的GeekGameBoard代码(它是一些苹果演示的改进版本码)。

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

3

你看到哪些CALayer方法不适用于iPhone?除了与CoreImage绑定的动画功能外,我还没有注意到很多缺失的东西。你可能会注意到的一件大事情是,所有的视图都是层次支持的(所以你不需要做任何特殊的事情来使用图层,你可以通过图层访问器方法来获取UIView的图层),坐标系统有一个顶部左起源。

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

话虽如此,一般来说图层比视图重量轻,所以如果你有很多单独的元素,你需要保持逻辑分离,你会发现移动到图层可以赢得使用视图。

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

1

你看到哪些CALayer方法不适用于iPhone?

作为一个例子,我尝试实施网格演示here,没有太多的运气。看起来CAConstraintLayoutManagerCAConstraintQuartzCore.h中不可用。

在另一种尝试,我尝试了很简单的,小的20×20 CALayer对象我UIView的图层属性的子层,但没有显示出来。

现在,我有一个自定义UIView其中我重写了drawRect方法。在drawRect我抓住上下文并渲染两种类型的CGLayerRef s:

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

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

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

基本上,我想测试是否使用CALayer不将完成两件事情:

  1. 让我更快的渲染,如果CALayer开销较少比我现在做
  2. 让我动画更加平滑,通过让我转变了一层了画面流畅

不幸的是,我似乎无法得到一个基本的CALayer目前的工作,并没有发现的示例代码块好看看和p躺着。