如何根据度数旋转将UIImageView移动到某个点?

时间:2015-11-30 11:51:46

标签: ios swift uiimageview

我有一个 rocket UIImageView,它通过NSTimer不断旋转:

 rotationDegrees = rotationDegrees + 0.5
 rocket.transform = CGAffineTransformMakeRotation(rotationDegrees * CGFloat(M_PI/180) )

一旦我点击屏幕,我需要它只是将其发射到特定的轨迹(我使用UIKit,没有SpriteKit,所以请不要SpriteKit建议:) 这是一张图片作为轨迹的一个例子:

enter image description here

我的touchesBegan()方法:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    // Invalidate the timer that rotates the Rocket
        rotationTimer.invalidate()

        // Fire timer that moves the Rocket
        moveRocketTimer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: "moveRocket", userInfo: nil, repeats: true)
}

这里是我需要移动火箭的功能,如8点X和8点Y

    func moveRocket() {
  rocket.center.x = ??? + 8
rocket.center.y = ??? + 8
}

我使用NSTimer移动火箭,因为我需要使用检查其与另一个视图的碰撞,如果CGRectIntersectsRect()

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您需要使用三角学来计算x和amp;的变化。 y对于给定的角度:

y = sin(angle);
x = cos(angle);

这将为您提供从-1到1的值。您需要根据需要缩放它们(在您的问题中,您乘以8。

您的角度值必须以弧度为单位。因此,如果角度为度,您可能需要编写一个函数来将度数转换为弧度:

func radiansFromDegrees(degrees: Float) -> Float
{
  return degrees * M_PI/180;
}

如果你想让你的船只移动8点/帧,你应该乘以8.这样就可以了:

rocket.center.y += 8.0 * sin(radiansFromDegrees(angle));
rocket.center.x += 8.0 * cos(radiansFromDegrees(angle));

你可能不得不做一些类型转换来使编译器满意,因为我认为sin和cos返回双倍。