掩盖性能

时间:2015-08-07 07:41:24

标签: ios objective-c swift core-graphics core-animation

我正在创建一个揭示底层图像的动画。有一个虚拟形状(例如星星)混乱地移动并揭开图像的不同部分。

到目前为止我有两个位图:

  • 面具(在这里移动的形状的痕迹' n'那里)
  • 图像(基础图像)

到目前为止,每个drawRect()我都是:

  1. 通过复制当前掩码创建newMask位图
  2. 在newMask上绘制图章
  3. 创建结果位图(将newMask应用到图像上)
  4. 将结果位图绘制到屏幕上下文
  5. 我在这种方法中挣扎着表现。任何想法如何改进它?

    特别是:

    • 是否可以跳过第1步。 2.直接画在面具上(而不是克隆它)。
    • 我是否应该开始尝试使用CALayer方法(如果在那里完全可以进行这种掩蔽)
    • 我应该使用OpenGL
    • 还有其他方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

不,你不应该操纵位图。这可能是CPU密集型以及不平稳(不平滑的动画)。

相反,你应该使用CAShapeLayer作为掩码和核心动画。

使用形状图层,您可以将路径(可以从UIBezierPath轻松创建的CGPath)安装到图层中。然后创建一个CABasicAnimation,将路径切换到新路径。诀窍是始终在动画的起始和结束路径中保持相同数量和类型的控制点。 (如果两条路径中控制点的数量和/或类型不同,则会得到非常非常奇怪的结果。请注意,创建圆弧的路径调用实际上会根据圆圈的多少来生成不同数量的控制点弧形盖,因此圆弧需要特殊处理。)

我在Github上有一个示例项目,演示了各种核心动画技术,包括演示"时钟擦除"显示/隐藏和图像视图的动画,就像你描述的那样。

https://github.com/DuncanMC/iOS-CAAnimation-group-demo

动画如下所示:

enter image description here

请注意,该图片的生涩性质是因为它是GIF。设备上的实际动画是黄油般的。它也可以创建非常复杂的平滑动画,如下所示:

enter image description here

(这不是面具动画,但可能是。)