Search code examples
iosobjective-cuiscrollviewuitapgesturerecognizer

How to tap to zoom and double tap to zoom out in iOS?


I'm developing an application to display a gallery of UIImages by using a UIScrollView, my question is, how to tap to zoom and double tap to zoom out, how does it work when handling with UIScrollView.


Solution

  • You need to implement UITapGestureRecognizer - docs here - in your viewController

    - (void)viewDidLoad
    {
        [super viewDidLoad];       
    
        // what object is going to handle the gesture when it gets recognised ?
        // the argument for tap is the gesture that caused this message to be sent
        UITapGestureRecognizer *tapOnce = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapOnce:)];
        UITapGestureRecognizer *tapTwice = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTwice:)];
    
        // set number of taps required
        tapOnce.numberOfTapsRequired = 1;
        tapTwice.numberOfTapsRequired = 2;
    
        // stops tapOnce from overriding tapTwice
        [tapOnce requireGestureRecognizerToFail:tapTwice];
    
        // now add the gesture recogniser to a view 
        // this will be the view that recognises the gesture  
        [self.view addGestureRecognizer:tapOnce];
        [self.view addGestureRecognizer:tapTwice];
    
    }
    

    Basically this code is saying that when a UITapGesture is registered in self.view the method tapOnce or tapTwice will be called in self depending on if its a single or double tap. You therefore need to add these tap methods to your UIViewController:

    - (void)tapOnce:(UIGestureRecognizer *)gesture
    {
        //on a single  tap, call zoomToRect in UIScrollView
        [self.myScrollView zoomToRect:rectToZoomInTo animated:NO];
    }
    - (void)tapTwice:(UIGestureRecognizer *)gesture
    {
        //on a double tap, call zoomToRect in UIScrollView
        [self.myScrollView zoomToRect:rectToZoomOutTo animated:NO];
    }
    

    Hope that helps