2012-05-28 7 views
6

次のコードは、1.0の目盛りにジャンプした後で、コンテナビューを正確に挟み/ズームします。どのようにしてコンテナビューを現在の縮尺から拡大縮小することができますか? .hファイルで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

、追加:

の.mファイルで
CGFloat _lastScale; 

- (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とrecognizer.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

ズームアウトするには、より多くのコーディングが必要です。 –

関連する問題