J'essaie d'avoir ce mécanisme de rotation pour enclencher des angles droits, par ex. Lorsque l'utilisateur se rapproche de (85 à 95 degrés), il s'aligne automatiquement à 90 degrés jusqu'à ce qu'il s'éloigne de 85 ou 95 degrés.UIRotationGestureRecognizer à enclencher sur les angles droits
var lastRotation = CGFloat()
func rotateAction(sender:UIRotationGestureRecognizer){
let currentTransform = sender.view?.transform
let rotation = 0.0 - (lastRotation - sender.rotation)
let newTransform = currentTransform!.rotated(by: rotation)
let radians = atan2f(Float(sender.view!.transform.b), Float(sender.view!.transform.a))
let degrees = radians * (180/.pi)
sender.view?.transform = newTransform
lastRotation = sender.rotation
if sender.state == .ended {
lastRotation = 0.0;
}
// The if statement works correctly when reaching the angles
if degrees > -95 && degrees < -85 {
}
else if degrees > -185 && degrees < -175 {
}
else if degrees > -275 && degrees < -265 {
}
else if degrees > -5 && degrees < 5 {
// So I tried this but it does not seem right, it always pushed it away from angle 0
lastRotation = CGFloat(0.0 - radians)
}
}
J'imprimer vos calculs que vous allez - degrés sort réellement entre -180 ... 0 ... 180 ...- 180 etc – solenoid
Aussi, gardez A l'esprit, sender.rotation est additif, c'est-à-dire que si vous faites plusieurs tours dans la même direction, ce sera 360, 720, 1080 (quoi que ce soit en rads). En allant dans l'autre sens, ce nombre diminuera. – solenoid