2012-02-24 108 views
3

我有一个imageView,我已经添加了UIPinchGestureRecognizer和UIRotationGestureRecognizer。如何在保持原有旋转变换的同时进行缩放?

在捏手势,我转换和缩放视图和旋转手势我对它应用旋转变换。

问题是当我旋转imageView,然后开始缩放。缩放总是从正常状态开始。

所以我想要的是当我旋转它说顺时针30度,然后放大它。它应该在顺时针方向保持30度的同时进行缩放。

下面是代码:

- (void)viewDidLoad{ 
    [super viewDidLoad]; 

//setting up the image view 

mTotalRotation = 0.0; 
self.imageView.image = self.photo; 
self.imageView.userInteractionEnabled = YES; 

UIRotationGestureRecognizer *twoFingersRotate = 
[[[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingersRotate:)] autorelease]; 
[self.imageView addGestureRecognizer:twoFingersRotate]; 

UIPinchGestureRecognizer *pinchGesture = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchZoom:)] autorelease]; 
[self.imageView addGestureRecognizer:pinchGesture]; 

// Do any additional setup after loading the view from its nib. 
} 
// Rotation gesture handler 
- (void)twoFingersRotate:(UIRotationGestureRecognizer *)recognizer 
{ 


if ([recognizer state] == UIGestureRecognizerStateEnded) { 

    mTotalRotation += recognizer.rotation; 
    return; 
} 

self.imageView.transform = CGAffineTransformMakeRotation(mTotalRotation + recognizer.rotation);   


} 


    // Pinch Gesture 

    -(void)pinchZoom:(UIPinchGestureRecognizer*)recognizer{ 


    self.imageView.transform = CGAffineTransformMakeScale(recognizer.scale, recognizer.scale) ; 



} 
+1

你能分享你用旋转和缩放图像视图的代码? – sch 2012-02-24 15:13:46

+0

@sch:请现在检查。我已经添加了代码。 – 2012-02-24 15:32:49

+1

查看本教程:[iOS 5中的UIGestureRecognizer教程:捏,平底锅等!](http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more )如果您已经知道如何处理手势识别器,请跳转到* Simultaneous Gesture Recognizers * – Frade 2012-02-24 15:32:05

回答

4

更改行:

self.imageView.transform = CGAffineTransformMakeRotation(mTotalRotation + recognizer.rotation); 

有:

self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, recognizer.rotation); 

而行:

self.imageView.transform = CGAffineTransformMakeScale(recognizer.scale, recognizer.scale); 

有:

self.imageView.transform = CGAffineTransformScale(self.imageView.transform, recognizer.scale, recognizer.scale); 

编辑

要限制其规模,你可以做到以下几点:

CGAffineTransform transform = self.imageView.transform; 
float newScale = recognizer.scale * sqrt(transform.a*transform.a + transform.c*transform.c); 
if (newScale > scaleLimit) { 
    self.imageView.transform = CGAffineTransformScale(transform, recognizer.scale, recognizer.scale); 
} 
+0

我在观看ray wenderlich教程后直接进行了操作。 http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more 有无论如何,我可以检查,如果我没有放大到一定水平。我想限制它的大小的一半,不能比这更小。像scrollViews minimumZoomScale。 – 2012-02-24 15:58:27

+1

@AmoghTalpallikar - 见我编辑的答案。 – sch 2012-02-24 16:10:29

+0

:非常感谢!我不知道要花多少时间才能找到并理解变换背后的数学。 btw只有一个问题,我们需要在将缩放和旋转应用回0之后将识别器的缩放比例设置回1.否则其缩放和旋转速度非常快! – 2012-02-25 07:36:06

0

也许你可以有你的缩放和旋转视图时,您缩放视图的子视图?

相关问题