2012-02-24 110 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

也許你可以有你的縮放和旋轉視圖時,您縮放視圖的子視圖?

相關問題