(Xcode 11.4 · Swift 5 · iOS Target 13.4)
Урезанный код SwiftUI iOS ниже создает представление, которое содержит плавно вращающиеся секундные стрелки часов. Он работает нормально, за исключением того, что анимация запускается против часовой стрелки, когда значение секунд изменяется с 59 на 0. Как заставить секундный стрелку вращаться только по часовой стрелке?
import SwiftUI
struct ClockView: View {
@State var now = Date()
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
var body: some View {
ZStack {
Pointer()
.stroke(Color.orange, lineWidth: 1)
.rotationEffect(Angle.degrees(360 * now.second / 60))
.animation(Animation.linear(duration: 1.0))
.frame(width: 300, height: 300)
}.onReceive(timer) { time in
self.now = time
}
}
}
struct ClockView_Previews: PreviewProvider {
static var previews: some View {
ClockView()
}
}
struct Pointer: Shape {
func path(in rect: CGRect) -> Path {
Path { p in
p.move(to: CGPoint(x: rect.midX, y: rect.minY))
p.addLine(to: CGPoint(x: rect.midX, y: rect.midY))
}
}
}
extension Date {
var second: Double {
return Double(Calendar.current.dateComponents([.second], from: self).second ?? 0)
}
}