迅速的atan2度优化

时间:2018-06-03 10:34:48

标签: animation math swift3 uiview atan2

我试图指出一个所谓的' bar'将它旋转到一个“扬声器”上。 见下面的例子:

enter image description here

但是你可以看到upperLeftBar是唯一真正指向正确的东西。 upperRightBarlowerLeftBar几乎可以,但仍然不太好。正如您所看到的,lowerRightBar完全丢失了。

如何优化此功能?代码非常简单,我只需使用atan2并使用DY / DX进行操作,然后将半径转换为度数并让它旋转。请参阅下面的代码段。

public func foo(){
    upperLeftBar.rotate(angle: calculateRotatingDegree(view: upperLeftBar, view2: speakerImage))
    upperRightBar.rotate(angle: calculateRotatingDegree(view: speakerImage, view2: upperRightBar))
    lowerLeftBar.rotate(angle: calculateRotatingDegree(view: lowerLeftBar, view2: speakerImage))
    lowerRightBar.rotate(angle: calculateRotatingDegree(view: speakerImage, view2: lowerRightBar))
}

private func calculateRotatingDegree(view:UIView, view2:UIView) -> CGFloat{
    let origin2 = view.frame.origin
    let origin1 = view2.frame.origin
    return atan2(origin1.y - origin2.y, origin1.x - origin2.x).radiansToDegrees
}

extension FloatingPoint {
    var radiansToDegrees: Self { return self * 180 / .pi }
}


func rotate(angle: CGFloat) {
    let radians = angle / 180.0 * CGFloat(Double.pi)
    self.transform = CGAffineTransform.init(rotationAngle: radians)
}

0 个答案:

没有答案