我一直在研究类似于命运之轮的纺车。我几乎把它弄碎了,但后来撞到了一堵砖墙。与这篇文章中提到的问题相同。轮子动画需要来回移动,就好像它正在产生动量一样,释放时它会顺时针转动。
然而,我已经完成了所有工作,在第一次触摸时,轮子会跳跃,因为它的起点已经从我的手指触地位置而不是从它当前的站立位置开始。我理解它为什么这样做,但我不知道如何做到这一点,所以没有跳跃。
我已经看到使用 UIRotateGestureRecognizer 的建议,我发现它的问题是;当您旋转度数增量并且动画变得更快时,当您以相反的方式进行时,您必须从当时的任何度数递减,这意味着动画从您的手势方向朝着错误的方向前进,直到您递减到负度。我确信有可能纠正这些问题,但我与我当前的解决方案 id 非常接近,而不是在有解决方案的情况下重写。
我意识到其他帖子使用 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));
}