如何根据角度旋转将 UIImageView 移向某个点?

Posted

技术标签:

【中文标题】如何根据角度旋转将 UIImageView 移向某个点?【英文标题】:How to move a UIImageView towards a certain point based on its degrees rotation? 【发布时间】:2015-11-30 11:51:45 【问题描述】:

我有一个 rocket UIImageView,它使用 NSTimer 不断围绕自身旋转:

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

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

我的 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 那样移动 Rocket 的功能

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

我正在使用 NSTimer 来移动火箭,因为我需要使用 if CGRectIntersectsRect() 检查它与另一个视图的碰撞。

【问题讨论】:

【参考方案1】:

您需要使用三角函数来计算给定角度下 x 和 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 返回双精度值。

【讨论】:

感谢您的回复!你的意思是这样的:rocket.center.x = cos(rotationDegrees) * 8 -- Rocket.center.y = sin(rotationDegrees) * 8?你可以为我的 moveRocket() 函数写一个例子吗?非常感谢! 是的,这是一般的想法,但是您需要将角度转换为弧度。如果你不能让它工作,你为什么不自己编写代码并回发。如果我不给你代码,你会学到更多东西,你可以简单地放置到位。 好的,我正在寻找一个快速的解决方案,我对弧度和度数一点经验都没有。无论如何谢谢,但我希望有人会发布一个更好的答案,我不能接受你的,对不起:( 那么您唯一能接受的答案是有人为您编写代码?那么你不属于SO。计算机图形学需要三角和代数的工作知识。您发布的代码已经具有将度数转换为弧度的代码。自己想想! 嗯,你见过有人发布用户要求的代码吗?我在这里做了很多次,否则为什么用户要提出问题,如果他们得到的答案是近似的或不完整的,或者它基本上说:自己做,伙计,这里有几个变量,现在在你的自己的。也许你的几行示例代码对你的简历也很有帮助,对于即将登陆这里的新用户来说,这不是一个坏主意:)

以上是关于如何根据角度旋转将 UIImageView 移向某个点?的主要内容,如果未能解决你的问题,请参考以下文章

iphone sdk CGAffineTransform 获取对象的旋转角度

iOS基础之UIImageView

使 UIImageview 根据另一个 UIImageview 旋转而旋转

将世界中的物体移向静止的相机

如何将 UIImageView 旋转 20 度?

旋转 uiimageview 时出现问题