我需要在目标c>>中实现以下应用程序。 http://bit.ly/rHzVkF
如何通过应用中的拖动来旋转圆圈?你知道一些类似的例子吗?
答案 0 :(得分:1)
在触摸开始的方法中,您需要检查x和y,看看它是否在两个旋转标签的边界内。
现在你的触摸移动你需要检测你的x和y位置的变化(delta)并使用ATAN2(dx,dy)我相信转换为弧度进行革命。如果我错了,你可以在纸上弄明白,它是简单的三角函数(不要忘记导入<Math.h>
)
使用这个新的旋转变量将其应用于您想要使用CGAffineTransformRotate();
旋转的对象(我相信这是Core Graphics的一部分,因此请确保您已导入该库)。
答案 1 :(得分:0)
@ihkawiss你知道如何用可可触摸绘制圆圈吗? - vikingosegundo
@ ihkawiss,我想,你不想回答我。没问题。您的需要需要分成较小的任务。
您应该能够在网络和堆栈溢出的每个步骤中获得足够的信息。如果你遇到困难(这是很正常的和预期的那样),请回过头来展示你到目前为止所得到的内容并解释你遇到的问题。
答案 2 :(得分:0)
我将尝试将我的两分钱放入其中,因为我必须解决类似的情况。
您必须在视图中实现要处理所有移动的触摸方法
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);
祝你好运,希望这有助于你开始。这个东西可能很棘手