2012-05-28 19 views
6

El siguiente código pellizca/acerca la vista del contenedor correctamente, pero solo después de que salta a una escala de 1.0. ¿Cómo puedo modificarlo para que la vista del contenedor se escale desde su escala actual?ios - Pellizcar/acercar con la escala actual

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

los solucionaron su problema ? Si es así, por favor comparte el código. – Manthan

Respuesta

9

En archivo .h, añadir:

CGFloat _lastScale; 

En el archivo .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

Esto no funciona del todo. Nunca escala a menos de 1.0 – soleil

+2

_lastScale y recognizer.scale son siempre muy similares, por lo que la escala siempre es muy cercana a 1.0, por lo que la vista apenas se acerca o aleja. – soleil

2

Así es como lo hago:

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

Esto requiere más codificación para alejar. –

Cuestiones relacionadas