Используя Swift5.2, iOS13.4,
Я пытаюсь анимировать аналоговые часы с секундной, минутной и часовой стрелками.
Полный пример часов можно найти здесь: [Ссылка] (Вот полный пример, который я использую: Пример часов
Все работает - за исключением того, что мой iPhone нагревается из-за низкой эффективности процессора в моих вычислениях углов или angle-animation.
Я обнаружил, что приведенные ниже угловые анимации отвечают за прогрев iPhone.
Как улучшить код, чтобы он был более эффективным с точки зрения использования процессора ?
Вот код вычисления угла:
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)
В тиковом таймере каждую секунду вычисляется следующее:
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 }
)
}