我需要在目标 c >> http://bit.ly/rHzVkF中实现以下应用程序
如何通过在应用程序中拖动来旋转圆圈?你知道一些类似的例子吗?
我需要在目标 c >> http://bit.ly/rHzVkF中实现以下应用程序
如何通过在应用程序中拖动来旋转圆圈?你知道一些类似的例子吗?
在您的 touches started 方法中,您需要检查 x 和 y 并查看它是否位于两个旋转标签的边界内。
现在,在您移动触摸时,您需要检测 x 和 y 位置的变化(增量)并使用 ATAN2(dx,dy) 我相信转换为弧度以进行旋转。如果我错了,你可以在纸上算出来,这是简单的三角函数(别忘了 import <Math.h>
)
使用这个用于旋转的新变量,将其应用到您要使用的旋转对象CGAffineTransformRotate();
(我相信这是核心图形的一部分,因此请确保您也已导入该库)。
@ihkawiss 你知道如何用 cocoa-touch 画一个圆圈吗?– vikingosegundo
@ihkawiss,我猜,你不想回答我。没问题。你的任务需要分成更小的任务。
您应该能够为网络中的每个步骤和堆栈溢出获得足够的信息。如果你被卡住了(这很正常,也是意料之中的),回来,展示你到目前为止所得到的,并解释你卡在哪里。
我将尝试将我的两分钱投入其中,因为我只需要解决类似的情况。
您必须在要处理所有运动的视图中实现触摸方法
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);
祝你好运,希望这可以帮助你开始。这东西可能很棘手