ios - 我如何创建一个 iOS CAAnimation 并自己定义每个插值?

标签 ios swift animation caanimation

我想为 CAShapeLayer 的路径设置动画。但是,此路径是使用许多弧创建的。弧的数量在路径的开始和结束值中是相同的。然而,由于弧的长度不同,这似乎意味着实际路径使用不同数量的贝塞尔曲线控制点。这意味着动画不可预测且非常有问题*。

到目前为止,我的解决方案是创建一个 CAKeyFrameAnimation,并放入大量关键帧。它仅适用于每秒非常多的关键帧。 (大约 200 到 300)。再低一点,就会出现故障*。

这种方法非常粗糙,因为它的成功取决于实际设备上的实际帧速率,并创建比动画实际需要更多的关键帧实例,从而浪费内存。 所以我的问题是:有没有办法创建一个动画,我必须以某种方式创建每个值?我正在想象一些基于委托(delegate)的方法,在这种方法中,系统会根据关键时间向我询问一个值。我不知道解决我的问题的最佳方法是什么。

*注意:我所说的故障是仅在一帧中出现的看起来很奇怪的路径。

最佳答案

您应该尝试使用 CADisplayLink

这是一个例子:

func setupAnimation() {
    let dispLink = CADisplayLink(target: self, selector: #selector(updateAnimation))
    dispLink.preferredFramesPerSecond = 60 //will update 60 times per second (the default for iOS devices) ... this line of code is optional depending on the fps you want for your animation
    dispLink.add(to: RunLoop.current, forMode: RunLoop.Mode.common)
}

func updateAnimation() {
    //do your animation code here
}

使用显示链接会将你的动画链接到屏幕的刷新率,这样它就很流畅,你基本上可以做任何你想做的事情而不会看起来很不稳定

关于ios - 我如何创建一个 iOS CAAnimation 并自己定义每个插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54137527/

相关文章:

ios - 第二个 UIWindow 中的方向更改

ios - SecKeyCreateSignature 使用 privateKey 提供错误访问权限

javascript - 隐藏 div 是否会停止动画(CSS 或 JS)?

html - 网站上的动画背景

iOS:将应用程序限制为仅限 64 位设备

ios - 单例+初始化代码

ios - 为什么 viewDidAppear 没有调用?

swift - 合并 <String, Any> 的字典

android - 如何为图层列表中的一项设置动画

ios - 查找垂直堆叠布局的 UIWebView 的最终高度