Mam widok w kształcie koła i obracam go za pomocą następującego nadpisania kodu: touchesBegan(touches:, withEvent:)
i touchesMoved(touches:, withEvent:)
.Obliczanie prędkości obrotowej i widok naturalnie obracanego iOS
var deltaAngle = CGFloat(0)
var startTransform: CGAffineTransform?
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
{
let touchPoint = touches.first!.locationInView(view)
let dx = touchPoint.x - view.center.x
let dy = touchPoint.y - view.center.y
deltaAngle = atan2(dy, dx)
startTransform = arrowPickerView.transform
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?)
{
let touchPoint = touches.first!.locationInView(view)
let dx = touchPoint.x - view.center.x
let dy = touchPoint.y - view.center.y
let angle = atan2(dy, dx)
let angleDifference = deltaAngle - angle
let transform = CGAffineTransformRotate(startTransform!, -angleDifference)
arrowPickerView.transform = transform
}
Chcę zastąpić touchesEnded(touches:, withEvent:)
obliczyć prędkość i mają widok naturalnie obracać trochę (podobny do ciągłego przewijania). Aktualnie zapisuję oryginalną transformację i obliczam kąt delta. Jak mogę to wdrożyć? Z góry dziękuję!
Prędkość jest odległością podzieloną przez czas, więc jeśli dodasz NSDate(). Timesince1970 w swoich dotknięciach Began i w swoich touchach, możesz obliczyć różnicę w sekundach między początkiem a końcowym zdarzeniem. Odległość to tylko sqrt (dx^2 + dy^2). Czy nie jest to prędkość, której szukasz? Inna źle przepisana odpowiedź poniżej :) – Emptyless
Szukałem tylko obsługi przewijania kinetycznego, aby kontynuować przewijanie. Jeśli użytkownik powie, że przewija się bardzo szybko, a potem naprawdę wolno i puszcza, to obraca się z prędkością większą niż ta, w której się obracał. Położyłem nacisk na prędkość w pytaniu, ale chodzi przede wszystkim o przewijanie kinetyczne. –