Здесь мой код: < /p>
Код: Выделить всё
const canvasRef = useCanvasRef();
const WORLD_W = 3000;
const WORLD_H = 2000;
const scale = useSharedValue(1);
const savedScale = useSharedValue(1);
const startScale = useSharedValue(1);
const translateX = useSharedValue(0);
const translateY = useSharedValue(0);
const startX = useSharedValue(0);
const startY = useSharedValue(0);
const focalX = useSharedValue(0);
const focalY = useSharedValue(0);
const pan = Gesture.Pan()
.onBegin(() => {
startX.value = translateX.value;
startY.value = translateY.value;
})
.onUpdate((e) => {
translateX.value = startX.value + e.translationX;
translateY.value = startY.value + e.translationY;
});
const pinch = Gesture.Pinch()
.onBegin(() => {
savedScale.value = scale.value;
})
.onUpdate((e) => {
const next = Math.max(0.5, Math.min(3, startScale.value * e.scale));
const dx = e.focalX - translateX.value;
const dy = e.focalY - translateY.value;
const factor = next / scale.value;
translateX.value = e.focalX - dx * factor;
translateY.value = e.focalY - dy * factor;
scale.value = next;
});
const transform = useDerivedValue(
() => [
{ translateX: translateX.value },
{ translateY: translateY.value },
{ scale: scale.value },
],
[]
);
const gestures = Gesture.Simultaneous(pan, pinch);
return (
{values.map((s) => (
))}
);
};
const styles = StyleSheet.create({
container: { flex: 1, backgroundColor: "#000" },
canvas: { flex: 1, backgroundColor: "#050815" },
});
Подробнее здесь: https://stackoverflow.com/questions/797 ... om-gesture