OGeek|极客世界-中国程序员成长平台

标题: ios - 掩蔽性能 [打印本页]

作者: 菜鸟教程小白    时间: 2022-10-22 09:02
标题: ios - 掩蔽性能

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

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

  • 面具(形状在此处移动的痕迹)
  • 图片(下图)

  • 至今在每drawRect()我曾是:
  • 通过复制当前掩码创建一个新的掩码位图
  • 在新面膜上盖章
  • 创建结果位图(将 newMask 应用到图像上)
  • 将生成的位图绘制到屏幕上下文

  • 我正在为这种方法的性能而苦苦挣扎。任何想法如何改进它?

    特别是:
  • 是否可以跳过步骤 1. & 2. 并直接绘制到蒙版上(而不是克隆它)。
  • 我是否应该开始尝试 CALayer 方法(如果这种掩蔽在那里完全可能)
  • 我应该使用 OpenGL
  • 有没有其他方法可以解决这个问题?


  • Best Answer-推荐答案


    不,您不应该操作位图。这很可能会占用大量 CPU 资源并且生涩(不流畅的动画)。

    相反,您应该使用 CAShapeLayer 作为蒙版和核心动画。

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

    我在 Github 上有一个示例项目,它演示了各种核心动画技术,包括“时钟删除”动画的演示,该动画显示/隐藏和 ImageView 非常像您描述的那样。

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

    动画看起来是这样的:

    enter image description here

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

    enter image description here

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

    关于ios - 掩蔽性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31872176/






    欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) Powered by Discuz! X3.4