围绕圆圈旋转

时间:2013-01-09 15:56:03

标签: ios objective-c cocoa-touch drag-and-drop geometry

我需要在目标c>>中实现以下应用程序。 http://bit.ly/rHzVkF

如何通过应用中的拖动来旋转圆圈?你知道一些类似的例子吗?

3 个答案:

答案 0 :(得分:1)

在触摸开始的方法中,您需要检查x和y,看看它是否在两个旋转标签的边界内。

现在你的触摸移动你需要检测你的x和y位置的变化(delta)并使用ATAN2(dx,dy)我相信转换为弧度进行革命。如果我错了,你可以在纸上弄明白,它是简单的三角函数(不要忘记导入<Math.h>

使用这个新的旋转变量将其应用于您想要使用CGAffineTransformRotate();旋转的对象(我相信这是Core Graphics的一部分,因此请确保您已导入该库)。

答案 1 :(得分:0)

  

@ihkawiss你知道如何用可可触摸绘制圆圈吗? - vikingosegundo

@ ihkawiss,我想,你不想回答我。没问题。您的需要需要分成较小的任务。

  1. 在给定的默认位置(手柄)上绘制小圆圈
  2. 画大圈
  3. 获取触摸坐标并检查,如果它在手柄内,请继续下一点。
  4. 计算圆心,触摸位置和固定点(即:顶部中心)之间的角度。
  5. 用圆角,固定点和圆的半径计算手柄的新位置
  6. 只要触摸触摸,
  7. 就会重新绘制所有内容。
  8. 您应该能够在网络和堆栈溢出的每个步骤中获得足够的信息。如果你遇到困难(这是很正常的和预期的那样),请回过头来展示你到目前为止所得到的内容并解释你遇到的问题。

答案 2 :(得分:0)

我将尝试将我的两分钱放入其中,因为我必须解决类似的情况。

您必须在视图中实现要处理所有移动的触摸方法

  • (void)touchesBegan:(NSSet *)触及withEvent:(UIEvent *)事件
  • (void)touchesMoved:(NSSet *)触及withEvent:(UIEvent *)事件
  • (void)touchesEnded:(NSSet *)触及withEvent:(UIEvent *)事件

Albert写道,您需要检测x和y位置的变化。您可以从触发方法发送到方法的NSSet触摸中获取位置。

在这些方法中,您需要实现此代码的一些变体才能使用触摸数据:

for(UITouch *t in touches){
    if([t tapCount] > 1){
        return;
    }
    CGPoint loc = [t locationInView:self.view];

一旦你有了用户触摸的地方的x和y,在这种情况下是CGPoint loc,你可以从math.h库中运行atan2方法并获得圆的弧度。你需要#include&lt; math.h&gt;为了使用atan2()

atan2()需要两个参数才能工作,两个y点和两个x点之间的差异。在我的例子中,我使用了当前(触摸y点, - 圆y的中心)和当前(触摸x点, - 圆x的中心)。

    double rads = atan2((loc.y - (self.frame.size.height/2)), (loc.x - (self.frame.size.width/2))); 

从那里你可以用这些信息做任何事情。要计算圆周围的新x和y位置,需要使用余弦和正弦函数来计算正确的坐标。

   newXposition = CenterX + cos(rads) * radiusOfCircle
   newYposition = CenterY + sin(rads) * radiusOfCircle

您可以通过将圆的中心X位置添加到cos的结果(输入我们之前得到的弧度)乘以圆的半径来获得新的xPosition。通过执行以下操作获得新的yposition与sin()相反的是相同的事情。

所以我的代码看起来像这样......

    float radius = 61;
    float newXPos = 140 + (cos(rads) * radius);
    float newYPos = 165 + (sin(rads) * radius);
祝你好运,希望这有助于你开始。这个东西可能很棘手