diff options
author | dan <dan.abramov@gmail.com> | 2023-09-20 02:32:44 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-19 18:32:44 -0700 |
commit | d2c253a284b3341e92ae104e49f2584602795575 (patch) | |
tree | 59def99fd9cf8353acb8cdd8528490cb41c5ace8 /src/view/com/lightbox/ImageViewing/components/ImageItem | |
parent | 859588c3f63949182acf3ca800b0229dd5e1d88e (diff) | |
download | voidsky-d2c253a284b3341e92ae104e49f2584602795575.tar.zst |
Make "double tap to zoom" precise across platforms (#1482)
* Implement double tap for Android * Match the new behavior on iOS
Diffstat (limited to 'src/view/com/lightbox/ImageViewing/components/ImageItem')
-rw-r--r-- | src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx index a6b98009a..03bf45af1 100644 --- a/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx +++ b/src/view/com/lightbox/ImageViewing/components/ImageItem/ImageItem.ios.tsx @@ -32,6 +32,7 @@ const SWIPE_CLOSE_VELOCITY = 1 const SCREEN = Dimensions.get('screen') const SCREEN_WIDTH = SCREEN.width const SCREEN_HEIGHT = SCREEN.height +const MAX_SCALE = 2 type Props = { imageSrc: ImageSource @@ -58,13 +59,18 @@ const ImageItem = ({ const [loaded, setLoaded] = useState(false) const [scaled, setScaled] = useState(false) const imageDimensions = useImageDimensions(imageSrc) - const handleDoubleTap = useDoubleTapToZoom(scrollViewRef, scaled, SCREEN) + const handleDoubleTap = useDoubleTapToZoom( + scrollViewRef, + scaled, + SCREEN, + imageDimensions, + ) const [translate, scale] = getImageTransform(imageDimensions, SCREEN) const scrollValueY = new Animated.Value(0) const scaleValue = new Animated.Value(scale || 1) const translateValue = new Animated.ValueXY(translate) - const maxScale = scale && scale > 0 ? Math.max(1 / scale, 1) : 1 + const maxScrollViewZoom = MAX_SCALE / (scale || 1) const imageOpacity = scrollValueY.interpolate({ inputRange: [-SWIPE_CLOSE_OFFSET, 0, SWIPE_CLOSE_OFFSET], @@ -118,7 +124,7 @@ const ImageItem = ({ pinchGestureEnabled showsHorizontalScrollIndicator={false} showsVerticalScrollIndicator={false} - maximumZoomScale={maxScale} + maximumZoomScale={maxScrollViewZoom} contentContainerStyle={styles.imageScrollContainer} scrollEnabled={swipeToCloseEnabled} onScrollEndDrag={onScrollEndDrag} |