使用CGAffineTransformMakeRotation旋转图像

时间:2011-07-14 07:32:51

标签: objective-c ipad uigesturerecognizer cgaffinetransform

我一直在研究类似于命运之轮的纺车。我差不多破了它,但后来碰了一堵砖墙。与此this帖子中提到的问题相同。轮子动画需要来回移动,就像它产生动量一样,在释放时它会顺时针转动。

我已经完成所有工作但是,在第一次触摸时,当我的手指触地而不是从当前的站立位置开始时,它会跳起来。我明白为什么它这样做,但我不知道怎么做它所以没有跳跃。

我见过使用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));

}

1 个答案:

答案 0 :(得分:0)

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