How to Zoom In/Out Photo on double Tap in the iPhone WWDC 2010 - 104 PhotoScroller

前端 未结 14 1750
野性不改
野性不改 2020-12-12 13:28

I am going through the Sample code of iPhone WWDC 2010 - 104 PhotoScroller App. It\'s working great with my project related images (PDF Page Images)

but I am struggl

14条回答
  •  爱一瞬间的悲伤
    2020-12-12 14:01

    My code, based upon some of the code at link "UIImageView does not zoom" This code handles toggling between zoomed in and zoomed out and will allow detection of a single tap along with a double tap. It also properly centers the zoom on the embedded image by applying the view transform on it. This code would go in the ImageScrollView class from the sample code.

    - (void)setupGestureRecognisers:(UIView *)viewToAttach {
    
        UITapGestureRecognizer *dblRecognizer;
        dblRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                            action:@selector(handleDoubleTapFrom:)];
        [dblRecognizer setNumberOfTapsRequired:2];
    
        [viewToAttach addGestureRecognizer:dblRecognizer];
        self.doubleTapRecognizer = dblRecognizer;
    
        UITapGestureRecognizer *recognizer;
        recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                         action:@selector(handleTapFrom:)];
        [recognizer requireGestureRecognizerToFail:dblRecognizer];
    
        [viewToAttach addGestureRecognizer:recognizer];
        self.tapRecognizer = recognizer;
    }
    
    - (void)handleTapFrom:(UITapGestureRecognizer *)recognizer {
    
       // do your single tap
    }
    
    
    - (CGRect)zoomRectForScale:(float)scale withCenter:(CGPoint)center {
    
        CGRect zoomRect;
    
        zoomRect.size.height = [_imageView frame].size.height / scale;
        zoomRect.size.width  = [_imageView frame].size.width  / scale;
    
        center = [_imageView convertPoint:center fromView:self];
    
        zoomRect.origin.x    = center.x - ((zoomRect.size.width / 2.0));
        zoomRect.origin.y    = center.y - ((zoomRect.size.height / 2.0));
    
        return zoomRect;
    }
    
    - (void)handleDoubleTapFrom:(UITapGestureRecognizer *)recognizer {
    
        float newScale = [self zoomScale] * 4.0;
    
        if (self.zoomScale > self.minimumZoomScale)
        {
            [self setZoomScale:self.minimumZoomScale animated:YES]; 
        }
        else 
        {
            CGRect zoomRect = [self zoomRectForScale:newScale 
                                       withCenter:[recognizer locationInView:recognizer.view]];
            [self zoomToRect:zoomRect animated:YES];
        }
    }
    

提交回复
热议问题