How would you implement pinch-zoom in react-native?

无人久伴 提交于 2019-12-03 07:02:42

If you need only simple pinch zoom functionality just use ScrollView (doc here)

Just give maximumZoomScale (greater than one) and minimumZoomScale as you wish.

Apart from looking at the Pan Responder, you'll need to take a look at the Gesture Responder System as well.

Particularly the evt that is returned by the responders. Here's that the React-Native docs say.

evt is a synthetic touch event with the following form:

nativeEvent
    changedTouches - Array of all touch events that have changed         since the last event
    identifier - The ID of the touch
    locationX - The X position of the touch, relative to the element
    locationY - The Y position of the touch, relative to the element
    pageX - The X position of the touch, relative to the root element
    pageY - The Y position of the touch, relative to the root element
    target - The node id of the element receiving the touch event
    timestamp - A time identifier for the touch, useful for velocity calculation
    touches - Array of all current touches on the screen

Now that you have the touches you can work out which areas/objects are being touched and adjust the item accordingly.

You'll need to use the Gesture Responder System.

Simple pinch and zoom gestures require translation and scaling.

To calculate the translation and scale factors you'll want to store the touch events and use the touch location deltas.

I've written an NPM module that does this.

react-native-pinch-zoom-responder

I've made a pinch to pan and zoom component for react-native-svg: https://snack.expo.io/@msand/zoomablesvg-v2.0.2

https://github.com/msand/zoomable-svg/blob/master/index.js

With support for view-box transforms and press/panhandlers in the children.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!