触摸不会“粘住”查看

时间:2012-11-19 15:19:15

标签: iphone objective-c ipad ios6

我需要在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);

视图正在旋转,但它与触摸(或我的开发环境中的光标)一起不能顺利进行。相反,它在触摸之前略微浮动。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

为什么不使用UIRotationGestureRecognizer(请参阅Apple文档中的Event Handling Programming Guide)?

它将使用标准旋转手势(两个手指)处理旋转,并直接为您提供角度,并且更易于使用。

但要直接回答你的问题,你的问题可能是你没有累积角度。您使用CGAffineTransformRotate使用angle2-angle1应用变换,这是当前触摸与上一次触摸之间的角度差异。因此,每次移动手指时,都会将subview的旋转角度更改为前一个点与当前点之间的差异,而不是触摸开始时的起点和当前点。您应该将touchesBegan:withEvent:中检索到的点用于d2而不是previousLocationInView: