繁体   English   中英

动画期间的 CPU 效率

[英]CPU efficiency during animations

使用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 }
    )
}

假设“分”和“小时”返回 integer,似乎分针每分钟只改变一次,而时针每小时只改变一次。 因此,仅在需要时为新的 position 设置动画,并且三分之一的 CPU 使用率消失了。

或者,如果您每秒移动分针一点点,则任何 animation 都将不可见。 (看看机械表的分针。它在移动,但你看不到它在移动)。 因此,您根本不需要 animation,并考虑您希望多久更新一次小时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM