• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 掩蔽性能

[复制链接]
菜鸟教程小白 发表于 2022-10-22 09:02:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

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

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

  • 至今在每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/

    回复

    使用道具 举报

    懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注0

    粉丝2

    帖子830918

    发布主题
    阅读排行 更多
    广告位

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap