使用Swift5.2、iOS13.4、
我尝试用秒针、分针和时针来模拟时钟。
时钟的完整示例可以在这里找到:Link(这是我使用的完整示例:Example Clock
一切正常-除了我的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 }
)
}发布于 2020-04-27 06:01:57
假设“分钟”和“小时”返回一个整数,似乎分针仅每分钟改变一次,而时针仅每小时改变一次。因此,仅在需要时才将手设置为新位置,这样CPU使用量就会减少三分之一。
或者,如果每秒钟将分钟指针移动一点,则任何动画都将不可见。(看看机械表的分针。它在移动,但你看不到它在移动)。所以你根本不需要动画,想想你想要多长时间更新一次。
https://stackoverflow.com/questions/61441370
复制相似问题