2012-05-28 150 views
6

下面的代碼正確捏/放大容器視圖,但只有在跳轉到1.0的比例後才能正確捏縮/放大容器視圖。我如何修改它以便容器視圖從當前比例縮放?ios - 從當前比例縮放/縮放

UIPinchGestureRecognizer *twoFingerPinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(twoFingerPinch:)]; 
[self.container addGestureRecognizer:twoFingerPinch]; 

- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer 
{ 
    _scale = recognizer.scale; 
    CGAffineTransform tr = CGAffineTransformScale(self.view.transform, _scale, _scale); 
    self.container.transform = tr; 
} 
+0

你解決你的問題?如果是,請分享代碼。 – Manthan

回答

9

在.h文件中,添加:

CGFloat _lastScale; 

在.m文件,

- (id)init { 
    ... 
    _lastScale = 1.0f; 
    ... 
} 

- (void)twoFingerPinch:(UIPinchGestureRecognizer *)recognizer 
{ 
    if (recognizer.state == UIGestureRecognizerStateEnded) { 
     _lastScale = 1.0f; 
     return; 
    } 

    CGFloat scale = 1.0f - (_lastScale - recognizer.scale); 
    CGAffineTransform tr = CGAffineTransformScale(self.view.transform, scale, scale); 
    self.container.transform = tr; 

    _lastScale = recognizer.scale; 
} 
+0

這不起作用。它從未縮放到小於1.0 – soleil

+2

_lastScale和recognitionizer.scale總是非常相似,因此縮放總是非常接近1.0,所以視圖幾乎不能放大或縮小。 – soleil

2

這裏是我如何做到這一點:

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

    static float initialDifference = 0.0; 
    static float oldScale = 1.0; 

    if (recognizer.state == UIGestureRecognizerStateBegan){ 
     initialDifference = oldScale - recognizer.scale; 
    } 

    CGFloat scale = oldScale - (oldScale - recognizer.scale) + initialDifference; 

    myView.transform = CGAffineTransformScale(self.view.transform, scale, scale); 

    oldScale = scale;  

} 
+0

這需要更多編碼才能縮小。 –