动画期间的CPU效率



使用Swift5.2、iOS13.4、

我试着用秒针、分针和时针制作模拟时钟的动画。

时钟的完整示例可以在这里找到:[Link](这是我正在使用的完整示例:示例时钟

一切都正常——除了我的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)

以下内容在计时器刻度内每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 }
)
}

假设"minute"one_answers"hour"返回一个整数,则分针似乎只每分钟变化一次,时针只每小时变化一次。因此,只有在需要的时候才能将手设置到新的位置,并且三分之一的CPU使用量已经用完。

或者,如果每秒将分针移动一点,则任何动画都将不可见。(看看机械表的分针。它在动,但你看不到它在动(。所以你根本不需要动画,想想你想多久更新一次小时。

最新更新