1

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

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

4

3 回答 3

1

在您的 touches started 方法中,您需要检查 x 和 y 并查看它是否位于两个旋转标签的边界内。

现在,在您移动触摸时,您需要检测 x 和 y 位置的变化(增量)并使用 ATAN2(dx,dy) 我相信转换为弧度以进行旋转。如果我错了,你可以在纸上算出来,这是简单的三角函数(别忘了 import <Math.h>

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

于 2013-01-09T16:11:02.160 回答
0

@ihkawiss 你知道如何用 cocoa-touch 画一个圆圈吗?– vikingosegundo

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

  1. 在给定的默认位置(手柄)上绘制小圆圈
  2. 画大圆圈
  3. 获取触摸坐标并检查它是否在句柄内,继续下一个点。
  4. 计算圆心、触摸位置和固定点(即:顶部中心)之间的角度。
  5. 用圆的角度、定点和半径计算手柄的新位置
  6. 只要触发触摸,就重新绘制所有内容。

您应该能够为网络中的每个步骤和堆栈溢出获得足够的信息。如果你被卡住了(这很正常,也是意料之中的),回来,展示你到目前为止所得到的,并解释你卡在哪里。

于 2013-01-09T23:17:13.123 回答
0

我将尝试将我的两分钱投入其中,因为我只需要解决类似的情况。

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

  • (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  • (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
  • (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

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 < math.h > 才能使用 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);

祝你好运,希望这可以帮助你开始。这东西可能很棘手

于 2013-01-18T16:50:19.947 回答