2017-08-05 2 views
1

J'essaie d'obtenir un UIView appelé object pour faire pivoter le point au centre d'un autre UIView appelé orig. Je n'arrive pas à calculer correctement l'angle. Mon trig est un peu rouillé donc je ne peux pas comprendre comment mes maths sont faux.Rotation d'un UIView pour pointer vers un autre UIView

let y0 = object.center.y 
let y1 = orig?.center.y 
let x0 = object.center.x 
let x1 = orig?.center.x 

let angle = atan2((y1! - y0), (x1! - x0)) * 180/CGFloat.pi 
rotateTo(object: object, degrees: angle, time: deplexed[1] as! CGFloat) 

Répondre

0

Création d'un objet par défaut et suppose qu'il est un bouton:

let button = UIButton() 

if button.transform == CGAffineTransform.identity { 

    UIView.animate(withDuration: 0.5, animations: { 

     button.transform = CGAffineTransform(rotationAngle: self.radians(degrees: 180)) 

    }) 

} else { 

    UIView.animate(withDuration: 0.5, animations: { 

    button.transform = CGAffineTransform.identity 

    }) 
} 

func radians(degrees: CGFloat) -> CGFloat { 

    return CGFloat(degrees * CGFloat.pi/degrees)  

} 
1

pour rendre le haut du point de vue des rotateurs au point cible.

let direction = CGPoint(x: targetPoint.x - rotatorView.center.x, y: targetPoint.y - rotatorView.center.y) 
var angle = atan2(direction.y, direction.x) 
rotatorView.transform = CGAffineTransform(rotationAngle: angle + .pi/2) 

atan2 renvoie zéro si le point est à droite.

enter image description here

Si vous voulez convertir le résultat de atan2 à des degrés:

if angle < 0 { 
    angle += .pi * 2 
} 
let degrees = angle * 180.0/.pi 

Vous ajoutez un cercle complet si l'angle est négatif. 0 degré points vers la droite.