2011-07-14 98 views
0

我一直在研究类似于命运之轮的纺车。我几乎破解它,但后来撞到了一堵砖墙。与this文章中提到的问题相同。轮子动画需要来回移动,就好像它正在产生动力,并在释放时它将顺时针转动。使用CGAffineTransformMakeRotation旋转图像

我已经掌握了所有这些工作,但是第一次触摸时,轮子跳起,因为它的起点已经从我的手指触地位置变成了,而不是从它的当前位置开始。我明白为什么要这样做,但我不知道如何让它没有跳跃。

我见过使用UIRotateGestureRecognizer的建议,我发现它的问题是;当您旋转度数增量并且动画变得更快时,当以相反的方式时,您必须从当时的程度减少,这意味着动画从您正在打手势的方向走向错误的方向,直到您递减到负面程度。我确定有可能纠正这些问题,但我现在的解决方案编号非常接近,而不是在有解决方案时重写。

我意识到其他职位使用totalRadians是解决方案,对我来说它不允许逆时针动画。

totalRadians += fabs(theAngle - totalRadians); 
    totalRadians = fmod(totalRadians, 2*M_PI); 

这是我到目前为止。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
UITouch *touch = [touches anyObject]; 
CGPoint location = [touch locationInView:wheelImage]; 
xleg = location.x-starttoset.x; 
yleg = location.y-starttoset.y; 
swipetimer = CFAbsoluteTimeGetCurrent(); 
CGAffineTransform transforms; 

location = [touch locationInView:wheelImage]; 
float theAngle = atan2(location.y-wheelImage.center.y, location.x-wheelImage.center.x); 


transforms = CGAffineTransformConcat(spinningWheelImage.transform,CGAffineTransformMakeRotation(theAngle)); 

} 
+0

任何人谁会照顾帮助? –

+0

Hellllllllllllllllllllllllllllp! –

+0

如果您遇到同样的问题,请按照以下示例进行操作。 http://ericmcconkie.com/2010/03/trig-and-objective-c/ –

回答

0

为了防止跳跃,您应该跟踪触摸开始移动时的位置,而不是第一次发生时的位置。

+0

林不知道我明白。当触摸开始移动时,我在屏幕上触摸到的x,y,这就是导致跳跃的原因,因为使用这些坐标来计算角度。 –

+0

触动开始,您将拥有与touchesMoved不同的位置。在开始移动触摸之前,iPhone会等待移动几个像素(这就是为什么你会看到跳跃)。您只需使用新值而不是touchesBegan中的值。 – jtbandes

+0

我刚刚编辑我的问题,指出代码正在从touchmoved执行。从代码中可以看出,使用location.y,x在touchesMoved中定义位置的位置计算角度。对不起,如果我不明白你是在大部分的夜晚尝试做这项工作,所以我可能会错过最简单的事情。如果我正确理解你,我应该使用在touchmove上的坐标,这就是我要做的。谢谢你的时间 –