我需要在iPad应用程序中旋转图像(例如顺时针方向)。图像保存在视图中:
UIImageView *view1 = [[UIImageView alloc] initWithFrame:CGRectMake(startX+lineWidth, startY+lineHeight, lineWidth, lineHeight)];
view1.tag = 0;
view1.image = [UIImage imageNamed:[images objectAtIndex:0]];
在
- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
我这样做:
CGPoint d1 = [touch locationInView:touch.view];
CGPoint d2 = [touch previousLocationInView:touch.view];
CGFloat angle1 = atan2(d1.y, d1.x);
CGFloat angle2 = atan2(d2.y, d2.x);
subview.transform = CGAffineTransformRotate(subview.transform, angle2-angle1);
视图正在旋转,但它与触摸(或我的开发环境中的光标)一起不能顺利进行。相反,它在触摸之前略微浮动。
我错过了什么?
答案 0 :(得分:0)
为什么不使用UIRotationGestureRecognizer
(请参阅Apple文档中的Event Handling Programming Guide)?
它将使用标准旋转手势(两个手指)处理旋转,并直接为您提供角度,并且更易于使用。
但要直接回答你的问题,你的问题可能是你没有累积角度。您使用CGAffineTransformRotate
使用angle2-angle1
应用变换,这是当前触摸与上一次触摸之间的角度差异。因此,每次移动手指时,都会将subview
的旋转角度更改为前一个点与当前点之间的差异,而不是触摸开始时的起点和当前点。您应该将touchesBegan:withEvent:
中检索到的点用于d2
而不是previousLocationInView:
。