ios - 动画期间的 CPU 效率
问题描述
使用Swift5.2、iOS13.4、
我尝试用秒针、分针和时针制作模拟时钟的动画。
时钟的完整示例可以在这里找到:[链接](这是我正在使用的完整示例:示例时钟
一切正常 - 除了我的 iPhone 由于我的角度计算或角度动画中的 CPU 效率不佳而变热。
我发现下面的角度动画是 iPhone 预热的原因。
如何改进我的代码以提高 CPU 效率?
这是角度计算代码:
public struct LocalTime {
var hour: Double = 10.0
var minute: Double = 10.0
var second: Int = 25
}
let translateToRadian: CGFloat = CGFloat(Double.pi/180.0)
以下是在 Timer-tick 内每 1 秒计算一次:
secondHand.updateHandAngle(angle: CGFloat(localTime.second * 6) * translateToRadian, duration: 1.0, options: .curveLinear)
minuteHand.updateHandAngle(angle: CGFloat(localTime.minute * 6) * translateToRadian, duration: 0.5, options: .curveEaseInOut)
hourHand.updateHandAngle(angle: CGFloat(localTime.hour * 30) * translateToRadian, duration: 0.5, options: .curveEaseInOut)
这是 updateAngle 方法:
func updateHandAngle(angle: CGFloat, duration: Double, options: UIView.AnimationOptions) {
UIView.animate(withDuration: duration,
delay: 0.0,
options: options,
animations: { self.transform = CGAffineTransform(rotationAngle: angle) },
completion: { (finished: Bool) in return }
)
}
解决方案
假设“分钟”和“小时”返回一个整数,似乎分针每分钟只改变一次,而时针每小时只改变一次。因此,仅在需要时才将手动画到新位置,并且三分之一的 CPU 使用率消失了。
或者,如果您每秒移动分针一点点,则任何动画都将不可见。(看看机械表的分针。它在移动,但你看不到它在移动)。所以你根本不需要动画,想想你想多久更新一次小时。
推荐阅读
- javascript - 范围下的“脚本”类别
- php - Represent image form database
- c++11 - 如何使用 premake 指定 C++11 编译?
- node.js - NodeJS aes gcm 无效套件类型错误
- apache-nifi - Nifi 消耗所有可用磁盘空间
- input - 终端多路复用器如何欺骗基于 S-Lang 的控制台应用程序的键盘输入?
- java - 在 DSE Spark 作业中读取 s3 文件失败
- linux - 如何配置linux内核的编译标志?
- html - Angular 6父/子路由和共享数据
- css - 菜单在 safari 中不可见