动画期间的CPU效率

问题描述 投票:0回答:1

使用Swift5.2,iOS13.4,

我尝试使用秒针,分针和时针为模拟时钟设置动画。

时钟的完整示例可以在这里找到:[链接](以下是我正在使用的完整示例:Example Clock

一切正常-只是由于角度计算或角度动画处理中CPU效率低而导致iPhone发热,我的iPhone才发热。

我发现下面的角度动画是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 }
    )
}

ios swift performance cpu clock
1个回答
1
投票

假设“分钟”和“小时”返回整数,似乎分针每分钟改变一次,时针仅每小时改变一次。因此,仅在需要时才将手动画到新位置,而三分之一的CPU使用率已消失。

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

© www.soinside.com 2019 - 2024. All rights reserved.