react-native-gesture-image-viewer 2.3.0 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -115,27 +115,28 @@ class GestureViewerManager {
115
115
  }
116
116
  rotate = (angle = 90, clockwise = true) => {
117
117
  const MAX_ANGLE = 360;
118
- if (!this.rotation || angle < 0 || angle > MAX_ANGLE || angle !== 0 && this.rotation.value % angle !== 0 && angle !== 360) {
118
+ const currentRotation = this.rotation?.get();
119
+ if (currentRotation === undefined || angle < 0 || angle > MAX_ANGLE || angle !== 0 && currentRotation % angle !== 0 && angle !== 360) {
119
120
  return;
120
121
  }
121
122
  if (angle === 0) {
122
- const nextAngle = Math.floor(this.rotation.value / MAX_ANGLE) * MAX_ANGLE;
123
- this.rotation.value = withTiming(clockwise ? nextAngle : nextAngle - MAX_ANGLE);
123
+ const nextAngle = Math.floor(currentRotation / MAX_ANGLE) * MAX_ANGLE;
124
+ this.rotation?.set(withTiming(clockwise ? nextAngle : nextAngle - MAX_ANGLE));
124
125
  return;
125
126
  }
126
127
  if (angle === 360) {
127
- this.rotation.value = withTiming(clockwise ? this.rotation.value + MAX_ANGLE : this.rotation.value - MAX_ANGLE);
128
+ this.rotation?.set(withTiming(clockwise ? currentRotation + MAX_ANGLE : currentRotation - MAX_ANGLE));
128
129
  return;
129
130
  }
130
- const nextAngle = clockwise ? this.rotation.value + angle : this.rotation.value - angle;
131
- this.rotation.value = withTiming(nextAngle);
131
+ const nextAngle = clockwise ? currentRotation + angle : currentRotation - angle;
132
+ this.rotation?.set(withTiming(nextAngle));
132
133
  };
133
134
  zoomIn = (multiplier = 0.25) => {
134
135
  if (!this.scale || !this.translateX || !this.translateY || multiplier < 0.01 || multiplier > 1) {
135
136
  return;
136
137
  }
137
- const nextScale = Math.min(this.scale.value * (1 + multiplier), this.maxZoomScale);
138
- this.scale.value = withTiming(nextScale);
138
+ const nextScale = Math.min(this.scale.get() * (1 + multiplier), this.maxZoomScale);
139
+ this.scale.set(withTiming(nextScale));
139
140
  const {
140
141
  translateX,
141
142
  translateY
@@ -143,22 +144,22 @@ class GestureViewerManager {
143
144
  width: this.width,
144
145
  height: this.height
145
146
  })({
146
- translateX: this.translateX.value,
147
- translateY: this.translateY.value,
147
+ translateX: this.translateX.get(),
148
+ translateY: this.translateY.get(),
148
149
  scale: nextScale
149
150
  });
150
- this.translateX.value = withTiming(translateX);
151
- this.translateY.value = withTiming(translateY);
151
+ this.translateX.set(withTiming(translateX));
152
+ this.translateY.set(withTiming(translateY));
152
153
  };
153
154
  zoomOut = (multiplier = 0.25) => {
154
155
  if (!this.scale || !this.translateX || !this.translateY || multiplier < 0.01 || multiplier > 1) {
155
156
  return;
156
157
  }
157
- const nextScale = Math.max(this.scale.value / (1 + multiplier), 1);
158
- this.scale.value = withTiming(nextScale);
158
+ const nextScale = Math.max(this.scale.get() / (1 + multiplier), 1);
159
+ this.scale.set(withTiming(nextScale));
159
160
  if (nextScale === 1) {
160
- this.translateX.value = withTiming(0);
161
- this.translateY.value = withTiming(0);
161
+ this.translateX.set(withTiming(0));
162
+ this.translateY.set(withTiming(0));
162
163
  return;
163
164
  }
164
165
  const {
@@ -168,20 +169,20 @@ class GestureViewerManager {
168
169
  width: this.width,
169
170
  height: this.height
170
171
  })({
171
- translateX: this.translateX.value,
172
- translateY: this.translateY.value,
172
+ translateX: this.translateX.get(),
173
+ translateY: this.translateY.get(),
173
174
  scale: nextScale
174
175
  });
175
- this.translateX.value = withTiming(translateX);
176
- this.translateY.value = withTiming(translateY);
176
+ this.translateX.set(withTiming(translateX));
177
+ this.translateY.set(withTiming(translateY));
177
178
  };
178
179
  resetZoom = (scale = 1) => {
179
180
  if (!this.scale || !this.translateX || !this.translateY || scale <= 0 || scale > this.maxZoomScale) {
180
181
  return;
181
182
  }
182
- this.scale.value = withTiming(scale);
183
- this.translateX.value = withTiming(0);
184
- this.translateY.value = withTiming(0);
183
+ this.scale.set(withTiming(scale));
184
+ this.translateX.set(withTiming(0));
185
+ this.translateY.set(withTiming(0));
185
186
  };
186
187
  goToIndex = index => {
187
188
  if (!this.enableHorizontalSwipe || !this.listRef) {
@@ -1 +1 @@
1
- {"version":3,"names":["withTiming","createBoundsConstraint","createScrollAction","GestureViewerManager","currentIndex","dataLength","width","height","maxZoomScale","enableHorizontalSwipe","enableLoop","listRef","scale","rotation","translateX","translateY","resetTransformCallback","loopCallback","programmaticScrollVersion","listeners","Set","eventListeners","Map","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","addEventListener","eventType","callback","has","set","get","size","emitEvent","data","emitZoomChange","previousScale","emitRotationChange","previousRotation","emitTap","totalCount","getProgrammaticScrollVersion","setEnableLoop","enabled","setWidth","setHeight","setListRef","ref","setDataLength","length","setEnableHorizontalSwipe","setCurrentIndex","index","setZoomSharedValues","setResetTransformCallback","notifyStateChange","setRotation","rotate","angle","clockwise","MAX_ANGLE","value","nextAngle","Math","floor","zoomIn","multiplier","nextScale","min","zoomOut","max","resetZoom","goToIndex","cancelPendingLoopTransition","scrollTo","updateCurrentIndex","handleMomentumScrollEnd","scrollIndex","handleScrollBeginDrag","goToPrevious","goToNext","cleanUp","clear","targetIndex"],"sourceRoot":"../../src","sources":["GestureViewerManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["withTiming","createBoundsConstraint","createScrollAction","GestureViewerManager","currentIndex","dataLength","width","height","maxZoomScale","enableHorizontalSwipe","enableLoop","listRef","scale","rotation","translateX","translateY","resetTransformCallback","loopCallback","programmaticScrollVersion","listeners","Set","eventListeners","Map","notifyListeners","state","getState","forEach","listener","subscribe","add","delete","addEventListener","eventType","callback","has","set","get","size","emitEvent","data","emitZoomChange","previousScale","emitRotationChange","previousRotation","emitTap","totalCount","getProgrammaticScrollVersion","setEnableLoop","enabled","setWidth","setHeight","setListRef","ref","setDataLength","length","setEnableHorizontalSwipe","setCurrentIndex","index","setZoomSharedValues","setResetTransformCallback","notifyStateChange","setRotation","rotate","angle","clockwise","MAX_ANGLE","currentRotation","undefined","nextAngle","Math","floor","zoomIn","multiplier","nextScale","min","zoomOut","max","resetZoom","goToIndex","cancelPendingLoopTransition","scrollTo","updateCurrentIndex","handleMomentumScrollEnd","scrollIndex","handleScrollBeginDrag","goToPrevious","goToNext","cleanUp","clear","targetIndex"],"sourceRoot":"../../src","sources":["GestureViewerManager.ts"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,7 @@ import { useGestureViewerPaging } from './useGestureViewerPaging';
10
10
  import { createBoundsConstraint, createScrollAction } from "./utils/index.js";
11
11
  import { getDismissDistance, shouldDismissByDirection } from "./utils/dismiss.js";
12
12
  import { applyTapZoomAtPoint } from "./utils/tapZoom.js";
13
+ import { calculateFocalPointTranslation, shouldAcceptFocalPoint } from "./utils/zoom.js";
13
14
  export const useGestureViewer = ({
14
15
  data,
15
16
  initialIndex = 0,
@@ -69,6 +70,9 @@ export const useGestureViewer = ({
69
70
  const triggerOpacity = useSharedValue(1);
70
71
  const lastFocalX = useSharedValue(0);
71
72
  const lastFocalY = useSharedValue(0);
73
+ const startFocalX = useSharedValue(0);
74
+ const startFocalY = useSharedValue(0);
75
+ const hasActiveFocal = useSharedValue(false);
72
76
  const dataLength = data?.length || 0;
73
77
  const animationConfig = useMemo(() => ({
74
78
  duration: triggerAnimation?.duration ?? 300,
@@ -97,13 +101,13 @@ export const useGestureViewer = ({
97
101
  return scrollAction.scrollTo(index, animated);
98
102
  }, [width, itemSpacing]);
99
103
  const resetTransformState = useCallback(() => {
100
- translateX.value = withTiming(0);
101
- translateY.value = withTiming(0);
102
- initialTranslateX.value = withTiming(0);
103
- initialTranslateY.value = withTiming(0);
104
- startScale.value = withTiming(1);
105
- scale.value = withTiming(1);
106
- rotation.value = 0;
104
+ translateX.set(withTiming(0));
105
+ translateY.set(withTiming(0));
106
+ initialTranslateX.set(withTiming(0));
107
+ initialTranslateY.set(withTiming(0));
108
+ startScale.set(withTiming(1));
109
+ scale.set(withTiming(1));
110
+ rotation.set(0);
107
111
  }, [initialTranslateX, initialTranslateY, rotation, scale, startScale, translateX, translateY]);
108
112
  const syncPendingIndex = useCallback(nextIndex => {
109
113
  if (nextIndex < 0 || nextIndex >= dataLength) {
@@ -133,13 +137,13 @@ export const useGestureViewer = ({
133
137
  const onAnimationComplete = useCallback(() => {
134
138
  onAnimationCompleteRef.current?.();
135
139
  }, []);
136
- useAnimatedReaction(() => scale.value, (currentScale, previousScale) => {
140
+ useAnimatedReaction(() => scale.get(), (currentScale, previousScale) => {
137
141
  if (currentScale !== previousScale) {
138
142
  scheduleOnRN(emitZoomChange, currentScale, previousScale);
139
143
  }
140
144
  scheduleOnRN(setIsZoomed, currentScale > 1);
141
145
  });
142
- useAnimatedReaction(() => rotation.value, (currentRotation, previousRotation) => {
146
+ useAnimatedReaction(() => rotation.get(), (currentRotation, previousRotation) => {
143
147
  if (currentRotation !== previousRotation) {
144
148
  scheduleOnRN(emitRotationChange, currentRotation, previousRotation);
145
149
  }
@@ -185,12 +189,12 @@ export const useGestureViewer = ({
185
189
  manager.setListRef(listRef.current);
186
190
  }, [manager]);
187
191
  useEffect(() => {
188
- translateY.value = 0;
189
- translateX.value = 0;
190
- scale.value = 1;
191
- backdropOpacity.value = 1;
192
- startScale.value = 1;
193
- rotation.value = 0;
192
+ translateY.set(0);
193
+ translateX.set(0);
194
+ scale.set(1);
195
+ backdropOpacity.set(1);
196
+ startScale.set(1);
197
+ rotation.set(0);
194
198
  if (adjustedInitialIndex <= 0 || !listRef.current) {
195
199
  return;
196
200
  }
@@ -218,22 +222,22 @@ export const useGestureViewer = ({
218
222
  const startX = triggerRectRef.current.x + triggerRectRef.current.width / 2 - width / 2;
219
223
  const startY = triggerRectRef.current.y + triggerRectRef.current.height / 2 - height / 2;
220
224
  const initialScaleFromTrigger = Math.min(triggerRectRef.current.width / width, triggerRectRef.current.height / height);
221
- triggerScale.value = initialScaleFromTrigger;
222
- triggerTranslateX.value = startX;
223
- triggerTranslateY.value = startY;
224
- triggerOpacity.value = 0;
225
- triggerScale.value = withTiming(1, animationConfig, finished => {
225
+ triggerScale.set(initialScaleFromTrigger);
226
+ triggerTranslateX.set(startX);
227
+ triggerTranslateY.set(startY);
228
+ triggerOpacity.set(0);
229
+ triggerScale.set(withTiming(1, animationConfig, finished => {
226
230
  if (finished) {
227
231
  scheduleOnRN(onAnimationComplete);
228
232
  }
229
- });
230
- triggerTranslateX.value = withTiming(0, animationConfig);
231
- triggerTranslateY.value = withTiming(0, animationConfig);
232
- triggerOpacity.value = withTiming(1, {
233
+ }));
234
+ triggerTranslateX.set(withTiming(0, animationConfig));
235
+ triggerTranslateY.set(withTiming(0, animationConfig));
236
+ triggerOpacity.set(withTiming(1, {
233
237
  duration: animationConfig.duration / 2,
234
238
  easing: animationConfig.easing,
235
239
  reduceMotion: animationConfig.reduceMotion
236
- });
240
+ }));
237
241
  setShouldStartTriggerAnimation(false);
238
242
  }
239
243
  }, [shouldStartTriggerAnimation, animationConfig, width, height, triggerOpacity, triggerScale, triggerTranslateX, triggerTranslateY, onAnimationComplete]);
@@ -253,7 +257,7 @@ export const useGestureViewer = ({
253
257
  return;
254
258
  }
255
259
  triggerRectRef.current = nextTriggerRect;
256
- triggerOpacity.value = 0;
260
+ triggerOpacity.set(0);
257
261
  setShouldStartTriggerAnimation(true);
258
262
  registry.clearActiveTriggerNode(id);
259
263
  });
@@ -267,14 +271,14 @@ export const useGestureViewer = ({
267
271
  const endX = rect.x + rect.width / 2 - width / 2;
268
272
  const endY = rect.y + rect.height / 2 - height / 2;
269
273
  const endScale = Math.min(rect.width / width, rect.height / height);
270
- triggerScale.value = withTiming(endScale, animationConfig);
271
- triggerTranslateX.value = withTiming(endX, animationConfig);
272
- triggerTranslateY.value = withTiming(endY, animationConfig);
273
- triggerOpacity.value = withTiming(0, animationConfig, finished => {
274
+ triggerScale.set(withTiming(endScale, animationConfig));
275
+ triggerTranslateX.set(withTiming(endX, animationConfig));
276
+ triggerTranslateY.set(withTiming(endY, animationConfig));
277
+ triggerOpacity.set(withTiming(0, animationConfig, finished => {
274
278
  if (finished && onDismiss) {
275
279
  scheduleOnRN(onDismiss);
276
280
  }
277
- });
281
+ }));
278
282
  }, [animationConfig, height, onDismiss, triggerOpacity, triggerScale, triggerTranslateX, triggerTranslateY, width]);
279
283
  const dismissWithoutTrigger = useCallback(() => {
280
284
  if (onDismiss) {
@@ -314,53 +318,77 @@ export const useGestureViewer = ({
314
318
  const dismissGesture = useMemo(() => {
315
319
  const canDismiss = !isZoomed && dismissOptions.enabled;
316
320
  return Gesture.Pan().minDistance(10).averageTouches(true).activeCursor('grabbing').activeOffsetY([-10, 10]).failOffsetX([-10, 10]).withRef(dismissGestureRef).enabled(canDismiss).onUpdate(event => {
317
- translateY.value = event.translationY / dismissOptions.resistance;
321
+ translateY.set(event.translationY / dismissOptions.resistance);
318
322
  }).onEnd(event => {
319
323
  if (canDismiss && shouldDismissByDirection(event.translationY, dismissOptions.threshold, dismissOptions.direction)) {
320
324
  scheduleOnRN(handleDismiss);
321
325
  return;
322
326
  }
323
- translateY.value = withSpring(0, {
327
+ translateY.set(withSpring(0, {
324
328
  damping: 50,
325
329
  energyThreshold: 6e-9,
326
330
  mass: 4,
327
331
  overshootClamping: false,
328
332
  stiffness: 600
329
- });
333
+ }));
330
334
  });
331
335
  }, [translateY, dismissOptions, handleDismiss, isZoomed]);
332
336
  const zoomPinchGesture = useMemo(() => Gesture.Pinch().enabled(enablePinchZoom).onTouchesDown(event => {
333
337
  if (event.numberOfTouches === 2) {
334
338
  scheduleOnRN(setIsPinching, true);
335
339
  }
336
- }).onBegin(event => {
337
- startScale.value = scale.value;
338
- initialTranslateX.value = translateX.value;
339
- initialTranslateY.value = translateY.value;
340
- lastFocalX.value = event.focalX;
341
- lastFocalY.value = event.focalY;
340
+ }).onStart(event => {
341
+ startScale.set(scale.get());
342
+ initialTranslateX.set(translateX.get());
343
+ initialTranslateY.set(translateY.get());
344
+ startFocalX.set(event.focalX);
345
+ startFocalY.set(event.focalY);
346
+ lastFocalX.set(event.focalX);
347
+ lastFocalY.set(event.focalY);
348
+ hasActiveFocal.set(false);
342
349
  }).onUpdate(event => {
343
- const newScale = startScale.value * event.scale;
344
- scale.value = newScale;
350
+ const initialScale = startScale.get();
351
+ const newScale = initialScale * event.scale;
352
+ scale.set(newScale);
345
353
  if (newScale <= 1) {
346
- translateX.value = withTiming(0);
347
- translateY.value = withTiming(0);
354
+ translateX.set(withTiming(0));
355
+ translateY.set(withTiming(0));
348
356
  return;
349
357
  }
350
- const focalDeltaX = Math.abs(event.focalX - lastFocalX.value);
351
- const focalDeltaY = Math.abs(event.focalY - lastFocalY.value);
352
358
  const threshold = 50;
353
- if (focalDeltaX < threshold && focalDeltaY < threshold) {
354
- lastFocalX.value = event.focalX;
355
- lastFocalY.value = event.focalY;
359
+ if (shouldAcceptFocalPoint({
360
+ focalX: event.focalX,
361
+ focalY: event.focalY,
362
+ hasActiveFocal: hasActiveFocal.get(),
363
+ lastFocalX: lastFocalX.get(),
364
+ lastFocalY: lastFocalY.get(),
365
+ threshold
366
+ })) {
367
+ if (!hasActiveFocal.get()) {
368
+ startFocalX.set(event.focalX);
369
+ startFocalY.set(event.focalY);
370
+ }
371
+ lastFocalX.set(event.focalX);
372
+ lastFocalY.set(event.focalY);
373
+ hasActiveFocal.set(true);
356
374
  }
357
- const deltaScale = newScale - startScale.value;
358
- const centerX = lastFocalX.value - width / 2;
359
- const centerY = lastFocalY.value - height / 2;
360
-
361
- // NOTE 새로운 이동값 = 기존 이동값 - (중심점 거리 × 스케일 변화량) / 원래 스케일 (중심점이 화면 중심에서 멀수록, 확대 배율이 클수록 더 많이 이동)
362
- const newTranslateX = initialTranslateX.value - centerX * deltaScale / startScale.value;
363
- const newTranslateY = initialTranslateY.value - centerY * deltaScale / startScale.value;
375
+ const nextLastFocalX = lastFocalX.get();
376
+ const nextLastFocalY = lastFocalY.get();
377
+ const {
378
+ translateX: newTranslateX,
379
+ translateY: newTranslateY
380
+ } = calculateFocalPointTranslation({
381
+ currentFocalX: nextLastFocalX,
382
+ currentFocalY: nextLastFocalY,
383
+ height,
384
+ initialScale,
385
+ initialTranslateX: initialTranslateX.get(),
386
+ initialTranslateY: initialTranslateY.get(),
387
+ nextScale: newScale,
388
+ startFocalX: startFocalX.get(),
389
+ startFocalY: startFocalY.get(),
390
+ width
391
+ });
364
392
  const {
365
393
  translateX: constrainedTranslateX,
366
394
  translateY: constrainedTranslateY
@@ -369,69 +397,73 @@ export const useGestureViewer = ({
369
397
  translateX: newTranslateX,
370
398
  translateY: newTranslateY
371
399
  });
372
- translateX.value = constrainedTranslateX;
373
- translateY.value = constrainedTranslateY;
400
+ translateX.set(constrainedTranslateX);
401
+ translateY.set(constrainedTranslateY);
374
402
  }).onEnd(() => {
375
- if (scale.value > maxZoomScale) {
376
- scale.value = withTiming(maxZoomScale, {
403
+ const currentScale = scale.get();
404
+ if (currentScale > maxZoomScale) {
405
+ scale.set(withTiming(maxZoomScale, {
377
406
  duration: 300,
378
407
  easing: Easing.bezier(0.25, 0.1, 0.25, 1)
379
- });
408
+ }));
380
409
  const {
381
410
  translateX: constrainedTranslateX,
382
411
  translateY: constrainedTranslateY
383
412
  } = constrainTranslation({
384
413
  scale: maxZoomScale,
385
- translateX: translateX.value,
386
- translateY: translateY.value
414
+ translateX: translateX.get(),
415
+ translateY: translateY.get()
387
416
  });
388
- translateX.value = withTiming(constrainedTranslateX);
389
- translateY.value = withTiming(constrainedTranslateY);
417
+ translateX.set(withTiming(constrainedTranslateX));
418
+ translateY.set(withTiming(constrainedTranslateY));
390
419
  return;
391
420
  }
392
- if (scale.value < 1) {
393
- scale.value = withTiming(1, {
421
+ if (currentScale < 1) {
422
+ scale.set(withTiming(1, {
394
423
  duration: 300,
395
424
  easing: Easing.bezier(0.25, 0.1, 0.25, 1)
396
- });
397
- translateX.value = withTiming(0);
398
- translateY.value = withTiming(0);
399
- initialTranslateX.value = withTiming(0);
400
- initialTranslateY.value = withTiming(0);
425
+ }));
426
+ translateX.set(withTiming(0));
427
+ translateY.set(withTiming(0));
428
+ initialTranslateX.set(withTiming(0));
429
+ initialTranslateY.set(withTiming(0));
430
+ hasActiveFocal.set(false);
401
431
  return;
402
432
  }
403
433
  const {
404
434
  translateX: constrainedTranslateX,
405
435
  translateY: constrainedTranslateY
406
436
  } = constrainTranslation({
407
- scale: scale.value,
408
- translateX: translateX.value,
409
- translateY: translateY.value
437
+ scale: currentScale,
438
+ translateX: translateX.get(),
439
+ translateY: translateY.get()
410
440
  });
411
- translateX.value = withTiming(constrainedTranslateX);
412
- translateY.value = withTiming(constrainedTranslateY);
441
+ translateX.set(withTiming(constrainedTranslateX));
442
+ translateY.set(withTiming(constrainedTranslateY));
413
443
  }).onTouchesUp(() => {
414
444
  scheduleOnRN(setIsPinching, false);
415
445
  }).onFinalize(() => {
446
+ hasActiveFocal.set(false);
416
447
  scheduleOnRN(setIsPinching, false);
417
- }), [scale, enablePinchZoom, maxZoomScale, translateX, translateY, startScale, initialTranslateX, initialTranslateY, width, height, constrainTranslation, lastFocalX, lastFocalY]);
448
+ }), [scale, enablePinchZoom, maxZoomScale, translateX, translateY, startScale, initialTranslateX, initialTranslateY, width, height, constrainTranslation, lastFocalX, lastFocalY, startFocalX, startFocalY, hasActiveFocal]);
418
449
  const zoomPanGesture = useMemo(() => Gesture.Pan().enabled(enablePanWhenZoomed && isZoomed).activeCursor('grabbing').averageTouches(true).onBegin(() => {
419
- initialTranslateX.value = translateX.value;
420
- initialTranslateY.value = translateY.value;
450
+ initialTranslateX.set(translateX.get());
451
+ initialTranslateY.set(translateY.get());
421
452
  }).onUpdate(event => {
422
- if (scale.value > 1) {
423
- const newTranslateX = initialTranslateX.value + event.translationX;
424
- const newTranslateY = initialTranslateY.value + event.translationY;
453
+ const currentScale = scale.get();
454
+ if (currentScale > 1) {
455
+ const newTranslateX = initialTranslateX.get() + event.translationX;
456
+ const newTranslateY = initialTranslateY.get() + event.translationY;
425
457
  const {
426
458
  translateX: constrainedTranslateX,
427
459
  translateY: constrainedTranslateY
428
460
  } = constrainTranslation({
429
- scale: scale.value,
461
+ scale: currentScale,
430
462
  translateX: newTranslateX,
431
463
  translateY: newTranslateY
432
464
  });
433
- translateX.value = constrainedTranslateX;
434
- translateY.value = constrainedTranslateY;
465
+ translateX.set(constrainedTranslateX);
466
+ translateY.set(constrainedTranslateY);
435
467
  }
436
468
  }), [translateX, translateY, enablePanWhenZoomed, isZoomed, scale, initialTranslateX, initialTranslateY, constrainTranslation]);
437
469
  const emitSingleTap = useCallback((x, y) => {
@@ -478,31 +510,31 @@ export const useGestureViewer = ({
478
510
  const tapGesture = useMemo(() => Gesture.Exclusive(doubleTapGesture, singleTapGesture), [doubleTapGesture, singleTapGesture]);
479
511
  const zoomGesture = useMemo(() => Gesture.Race(zoomPinchGesture, Gesture.Exclusive(zoomPanGesture, tapGesture)), [zoomPinchGesture, zoomPanGesture, tapGesture]);
480
512
  const animatedStyle = useAnimatedStyle(() => ({
481
- opacity: triggerOpacity.value,
513
+ opacity: triggerOpacity.get(),
482
514
  transform: [{
483
- translateX: triggerTranslateX.value
515
+ translateX: triggerTranslateX.get()
484
516
  }, {
485
- translateY: triggerTranslateY.value
517
+ translateY: triggerTranslateY.get()
486
518
  }, {
487
- scale: triggerScale.value
519
+ scale: triggerScale.get()
488
520
  }, {
489
- translateY: translateY.value
521
+ translateY: translateY.get()
490
522
  }, {
491
- translateX: translateX.value
523
+ translateX: translateX.get()
492
524
  }, {
493
- scale: scale.value
525
+ scale: scale.get()
494
526
  }, {
495
- rotate: `${rotation.value}deg`
527
+ rotate: `${rotation.get()}deg`
496
528
  }]
497
529
  }));
498
530
  const backdropStyle = useAnimatedStyle(() => {
499
- const baseOpacity = triggerOpacity.value;
500
- if (!dismissOptions.fadeBackdrop || scale.value !== 1) {
531
+ const baseOpacity = triggerOpacity.get();
532
+ if (!dismissOptions.fadeBackdrop || scale.get() !== 1) {
501
533
  return {
502
534
  opacity: baseOpacity
503
535
  };
504
536
  }
505
- const dismissDistance = getDismissDistance(translateY.value, dismissOptions.direction);
537
+ const dismissDistance = getDismissDistance(translateY.get(), dismissOptions.direction);
506
538
  const dismissOpacity = interpolate(dismissDistance, [0, 200], [1, 0], 'clamp');
507
539
  return {
508
540
  opacity: baseOpacity * dismissOpacity