2012-05-28 17 views
6

Poniższy kod poprawnie uciska/powiększa widok kontenera, ale tylko po tym, jak przeskoczy do skali 1.0. Jak mogę go zmodyfikować, aby widok kontenera skalował się z bieżącej skali?ios - Pinch/zoom z aktualnej skali

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

Czy można rozwiązać problemu ? Jeśli tak, prosimy o udostępnienie kodu. – Manthan

Odpowiedz

9

W pliku .h, dodać:

CGFloat _lastScale; 

W .m pliku

- (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

To nie działa. Nigdy nie skaluje się do mniej niż 1.0 – soleil

+2

_lastScale i recognition.scale są zawsze prawie takie same, więc skala jest zawsze bardzo blisko 1,0, więc widok ledwo powiększa lub zmniejsza. – soleil

2

Oto jak to zrobić:

- (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

To wymaga więcej kodowania, aby pomniejszyć. –