ios uiscrollview uiscrollviewdelegate

ios - UIScrollView detectar pinch zoom end



uiscrollviewdelegate (3)

Lo hice con UIPinchGestureRecognizer .

-(void)viewDidLoad{ UIPinchGestureRecognizer *gestureRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinched:)] autorelease]; gestureRecognizer.delegate=self; [self.scrollView addGestureRecognizer:gestureRecognizer]; //your code } -(void)pinched:(UIPinchGestureRecognizer*)gestureRecognizer{ if(gestureRecognizer.state==UIGestureRecognizerStateEnded){ //pinch ended NSLog(@"scale: %f",scrollView.zoomScale); } } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer *)otherGestureRecognizer{ return YES; }

Estoy tratando de recibir una notificación cuando UIScrollView se aleja más de su límite de zoom mínimo y está a punto de animar, pero me resulta muy difícil. ¿Hay alguna manera de hacerlo con los métodos de delegate solo o tengo que anular UIScrollView''s manejo táctil UIScrollView''s ?


Puede usar el método delegate scrollViewDidZoom de UIScrollView para detectar el momento en que se va a animar. Verá que scrollView.zoomScale cae debajo de scrollView.minimumZoomScale mientras se pellizca la vista. Luego, tan pronto como el usuario suelta los dedos, se llamará una vez más a scrollView.zoomScale == scrollView.minimumZoomScale con scrollView.zoomScale == scrollView.minimumZoomScale , pero scrollView.zooming == NO .

Capturar este momento está bien y todo, pero intentar hacer cualquier cosa para adelantarse a la animación bounce-back-to-minimumZoomScale parece tener efectos secundarios realmente extraños para mí. :(


Use scrollViewDidZoom: y compruebe si scrollView.zoomBouncing == YES . Luego use zoomScale para determinar en qué dirección está rebotando la vista.

- (void)scrollViewDidZoom:(UIScrollView *)scrollView { if (scrollView.zoomBouncing) { if (scrollView.zoomScale == scrollView.maximumZoomScale) { NSLog(@"Bouncing back from maximum zoom"); } else if (scrollView.zoomScale == scrollView.minimumZoomScale) { NSLog(@"Bouncing back from minimum zoom"); } } }