使用UIRotationGestureRecognizer进行UIScrollView缩放问题

时间:2011-11-17 11:04:18

标签: iphone ios rotation scrollview

我有一个滚动视图,显示图像视图。我试图在图像视图上处理UIRotationGestureRecognizer。我得到了旋转事件并在同一个上应用了所需的变换。图像在滚动视图中正确旋转。然后,当我在滚动视图中执行任何操作(如缩放或平移)时,图像旋转和位置会进行折腾

_mainView是UIScrollView的子视图,也用于缩放

UIRotationGestureRecognizer *rotationGesture=[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGesture:)];    
[_mainView addGestureRecognizer:rotationGesture];    
[rotationGesture release];

-(void) rotationGesture:(UIRotationGestureRecognizer *) sender {    
    if(sender.state == UIGestureRecognizerStateBegan || 
       sender.state == UIGestureRecognizerStateChanged)
    {
        sender.view.transform = CGAffineTransformRotate(sender.view.transform, 
                                                            sender.rotation);
        _currRotation = _currRotation + sender.rotation;
        [sender setRotation:0];
    }
}

我想了解在滚动视图中处理旋转的正确方法是什么,即使在滚动视图中的缩放事件之后它仍保持旋转。

1 个答案:

答案 0 :(得分:0)

在UIGestureRecognizerDelegate中实施gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:方法,并返回您想要同时识别的所有手势 。如果您仍然遇到问题,请查看UIImageView Gestures (Zoom, Rotate) Question的答案。

祝你好运!

编辑:您的评论让我猜测问题是您一次只能进行一次变换,滚动视图应用缩放变换,替换旋转变换。您可以删除本机缩放识别器(请参阅this question),或在滚动视图中嵌套另一个UIView,然后对其应用旋转变换。我喜欢选项二,看起来更容易。如果选择选项1,请使用CGAffineTransformConcat独立应用缩放和旋转变换。