CR: double tap zoom centers on tap location

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent 8d2934d86e
commit c91658119d

@ -506,12 +506,27 @@ NS_ASSUME_NONNULL_BEGIN
self.areToolbarsHidden = !self.areToolbarsHidden;
}
- (void)didDoubleTapImage:(id)sender
- (void)didDoubleTapImage:(UITapGestureRecognizer *)gesture
{
DDLogVerbose(@"%@ did tap image.", self.logTag);
DDLogVerbose(@"%@ did double tap image.", self.logTag);
if (self.scrollView.zoomScale == self.scrollView.minimumZoomScale) {
[self.scrollView setZoomScale:self.scrollView.minimumZoomScale * 2 animated:YES];
CGFloat kDoubleTapZoomScale = 2;
CGFloat zoomWidth = self.scrollView.width / kDoubleTapZoomScale;
CGFloat zoomHeight = self.scrollView.height / kDoubleTapZoomScale;
// center zoom rect around tapLocation
CGPoint tapLocation = [gesture locationInView:self.scrollView];
CGFloat zoomX = MAX(0, tapLocation.x - zoomWidth / 2);
CGFloat zoomY = MAX(0, tapLocation.y - zoomHeight / 2);
CGRect zoomRect = CGRectMake(zoomX, zoomY, zoomWidth, zoomHeight);
CGRect translatedRect = [self.mediaView convertRect:zoomRect fromView:self.scrollView];
[self.scrollView zoomToRect:translatedRect animated:YES];
} else {
// If already zoomed in at all, zoom out all the way.
[self.scrollView setZoomScale:self.scrollView.minimumZoomScale animated:YES];
}
}

Loading…
Cancel
Save