旋转UIView指向另一个UIView

时间:2017-08-05 09:39:39

标签: swift uiview rotation transform

我试图让名为UIView的{​​{1}}轮流指向另一个名为object的{​​{1}}的中心。我似乎无法正确计算角度。我的触发有点生疏,所以我无法弄清楚我的数学错误。

UIView

2 个答案:

答案 0 :(得分:1)

使旋转器视点的顶部位于目标点。

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返回零。

enter image description here

如果要将atan2结果转换为度数:

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

如果角度为负,则添加一个完整的圆。 0度指向右侧。

答案 1 :(得分:0)

Create a default object and suppose it's a button :

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)       

}