Skip to content

Commit 803d6e2

Browse files
committed
Update builds
1 parent ecfb7ca commit 803d6e2

File tree

3 files changed

+50
-64
lines changed

3 files changed

+50
-64
lines changed

package.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,15 @@
55
"main": "dist/src/index.js",
66
"license": "MIT",
77
"peerDependencies": {
8-
"react-native": ">= 0.64.0"
8+
"react-native": ">= 0.66.0"
99
},
1010
"devDependencies": {
1111
"@types/react-native": "^0.65.0",
1212
"prettier": "^2.4.1",
13-
"react-native": ">= 0.64.0",
13+
"react-native": ">= 0.66.0",
1414
"typescript": "^4.4.3"
1515
},
16-
"dependencies": {
17-
"react-native-gesture-handler": "^2.2.0"
18-
},
16+
"dependencies": {},
1917
"files": [
2018
"package.json",
2119
"yarn.lock",

src/Image.tsx

Lines changed: 45 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@ import {
1414
SafeAreaView,
1515
Platform,
1616
} from 'react-native';
17-
import {
18-
GestureDetector,
19-
Gesture,
20-
GestureStateChangeEvent,
21-
gestureHandlerRootHOC,
22-
} from 'react-native-gesture-handler';
2317
import {ImageComponentOptionalProps, ImageComponentProps, ImageComponentState} from './types';
2418

2519
const SCREEN_WIDTH = Dimensions.get('window').width;
@@ -43,6 +37,7 @@ class ImageComponent extends React.Component<ImageComponentProps, ImageComponent
4337
private _lastScale: number = 1;
4438

4539
private _isGestureMoved: boolean = false;
40+
private _lastTap: number = 0;
4641

4742
constructor(props: ImageComponentProps) {
4843
super(props);
@@ -71,15 +66,27 @@ class ImageComponent extends React.Component<ImageComponentProps, ImageComponent
7166
onPanResponderTerminate: onPanEnd,
7267
onPanResponderRelease: onPanEnd,
7368
onPanResponderMove: onPanMove,
69+
70+
onPanResponderGrant: this._onPanResponderGrant,
7471
});
7572
}
7673

7774
private _onShouldSetPanResponder(evt: GestureResponderEvent) {
78-
return evt.nativeEvent.touches.length === 1;
75+
return evt.nativeEvent.touches.length <= 2;
76+
}
77+
78+
private _onPanResponderGrant = (_evt: any, gesture: PanResponderGestureState) => {
79+
if (gesture.numberActiveTouches === 2) {
80+
this._debug('_onPanResponderGrant', gesture);
81+
}
7982
}
8083

8184
private _onPanResponderMove(_evt: any, gesture: PanResponderGestureState) {
8285
this._debug('_onPanResponderMove', 'dx', gesture.dx, 'dy', gesture.dy, this._lastOffset);
86+
if (gesture.numberActiveTouches === 2) {
87+
return;
88+
}
89+
8390
this._isGestureMoved = true;
8491

8592
if (this._lastScale > this._getMinimumScale()) {
@@ -111,7 +118,22 @@ class ImageComponent extends React.Component<ImageComponentProps, ImageComponent
111118
this.props.onZoomStateChange(true);
112119
this._translateXY.setValue({x: 0, y: Math.max(0, gesture.dy)});
113120
}
114-
private _onPanResponderEnd(_evt: any, gesture: PanResponderGestureState) {
121+
private _onPanResponderEnd(_evt: GestureResponderEvent, gesture: PanResponderGestureState) {
122+
this._debug('_onPanResponderEnd', 'gesture.numberActiveTouches', gesture.numberActiveTouches);
123+
if (gesture.numberActiveTouches === 0) {
124+
this._debug('_onPanResponderEnd', 'gesture.dx', gesture.dx, 'gesture.dy', gesture.dy);
125+
if (Math.abs(gesture.dx) < 10 && Math.abs(gesture.dy) < 10) {
126+
this._handleTap({
127+
x: gesture.x0,
128+
y: gesture.y0
129+
});
130+
131+
return;
132+
}
133+
} else if (gesture.numberActiveTouches === 2) {
134+
return;
135+
}
136+
115137
if (!this._isGestureMoved) {
116138
return;
117139
}
@@ -156,7 +178,7 @@ class ImageComponent extends React.Component<ImageComponentProps, ImageComponent
156178
private _getMaximumScale = (): number => 2.5;
157179
private _getMinimumScale = (): number => 1.0;
158180

159-
private _handleImageZoomInOut = (evt: GestureStateChangeEvent<any>) => {
181+
private _handleImageZoomInOut = (evt: {x: number; y: number}) => {
160182
this._debug('double tab triggered', '_scaleNum', this._lastScale, evt, 'ratio', this._getRatio());
161183

162184
if (this._lastScale > this._getMinimumScale()) {
@@ -234,6 +256,19 @@ class ImageComponent extends React.Component<ImageComponentProps, ImageComponent
234256
}
235257
};
236258

259+
private _handleTap = (tapCoords: {x: number; y: number}) => {
260+
const now = (new Date()).getTime();
261+
const delta = now - this._lastTap;
262+
263+
this._debug('_handleTap', '_lastTap', this._lastTap, 'delta', delta);
264+
if (delta <= 500) {
265+
// double tap
266+
this._handleImageZoomInOut(tapCoords);
267+
}
268+
269+
this._lastTap = now;
270+
};
271+
237272
private _getRatio = () =>
238273
this.state.width
239274
? this.state.width >= SCREEN_WIDTH
@@ -368,19 +403,6 @@ class ImageComponent extends React.Component<ImageComponentProps, ImageComponent
368403
return <Animated.View style={footerAnim}>{innerComponent}</Animated.View>;
369404
};
370405

371-
private _gestureDoubleTap = () => Gesture.Tap().maxDuration(250).numberOfTaps(2).onStart((evt) => {
372-
this._debug('_gestureDoubleTap', 'onStart');
373-
this._handleImageZoomInOut(evt);
374-
this._debug('_gestureDoubleTap', 'this._handleImageZoomInOut', '-> ok');
375-
});
376-
private _gesturePinch = () => Gesture.Pinch().onEnd((evt) => {
377-
this._debug('_gesturePinch', 'onEnd');
378-
this._onPinchEnd(evt);
379-
}).onUpdate((evt) => {
380-
this._debug('_gesturePinch', 'onUpdate', evt);
381-
this._onPinchUpdate(evt);
382-
});
383-
384406
static getDerivedStateFromProps(
385407
nextProps: Readonly<ImageComponentProps>,
386408
prevState: Readonly<ImageComponentState>
@@ -450,9 +472,7 @@ class ImageComponent extends React.Component<ImageComponentProps, ImageComponent
450472
style={moveObjStyle}
451473
{...(this.state.isZooming || Platform.OS === 'ios' ? this._panResponder.panHandlers : {})}
452474
renderToHardwareTextureAndroid>
453-
<GestureDetector gesture={Gesture.Exclusive(this._gestureDoubleTap(), this._gesturePinch())}>
454475
<RNImage source={this.props.source} style={computeImageStyle} onLoadEnd={this._onImageLoadEnd} />
455-
</GestureDetector>
456476
</Animated.View>
457477
<SafeAreaView style={styles.safeAreaContainer} pointerEvents="none">
458478
{this._renderHeader()}
@@ -496,6 +516,4 @@ const styles = StyleSheet.create({
496516
},
497517
});
498518

499-
const Image = gestureHandlerRootHOC((props: ImageComponentProps) => <ImageComponent {...props} />);
500-
501-
export default Image;
519+
export default ImageComponent;

yarn.lock

Lines changed: 2 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -704,13 +704,6 @@
704704
exec-sh "^0.3.2"
705705
minimist "^1.2.0"
706706

707-
"@egjs/hammerjs@^2.0.17":
708-
version "2.0.17"
709-
resolved "https://registry.yarnpkg.com/@egjs/hammerjs/-/hammerjs-2.0.17.tgz#5dc02af75a6a06e4c2db0202cae38c9263895124"
710-
integrity sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==
711-
dependencies:
712-
"@types/hammerjs" "^2.0.36"
713-
714707
"@hapi/hoek@^9.0.0":
715708
version "9.2.1"
716709
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17"
@@ -928,11 +921,6 @@
928921
dependencies:
929922
"@types/node" "*"
930923

931-
"@types/hammerjs@^2.0.36":
932-
version "2.0.41"
933-
resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.41.tgz#f6ecf57d1b12d2befcce00e928a6a097c22980aa"
934-
integrity sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==
935-
936924
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
937925
version "2.0.4"
938926
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44"
@@ -2094,13 +2082,6 @@ hermes-profile-transformer@^0.0.6:
20942082
dependencies:
20952083
source-map "^0.7.3"
20962084

2097-
hoist-non-react-statics@^3.3.0:
2098-
version "3.3.2"
2099-
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
2100-
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
2101-
dependencies:
2102-
react-is "^16.7.0"
2103-
21042085
http-errors@1.8.1:
21052086
version "1.8.1"
21062087
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c"
@@ -2546,7 +2527,7 @@ lodash.throttle@^4.1.1:
25462527
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
25472528
integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
25482529

2549-
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21:
2530+
lodash@^4.17.14, lodash@^4.17.15:
25502531
version "4.17.21"
25512532
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
25522533
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
@@ -3340,7 +3321,7 @@ react-devtools-core@4.19.1:
33403321
shell-quote "^1.6.1"
33413322
ws "^7"
33423323

3343-
react-is@^16.13.1, react-is@^16.7.0:
3324+
react-is@^16.13.1:
33443325
version "16.13.1"
33453326
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
33463327
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
@@ -3359,17 +3340,6 @@ react-native-codegen@^0.0.8:
33593340
jscodeshift "^0.11.0"
33603341
nullthrows "^1.1.1"
33613342

3362-
react-native-gesture-handler@^2.2.0:
3363-
version "2.2.0"
3364-
resolved "https://registry.yarnpkg.com/react-native-gesture-handler/-/react-native-gesture-handler-2.2.0.tgz#a551f9ca33d8766d0a24268f49e0f1b05191b105"
3365-
integrity sha512-WF25CNgn164bF9juW8N/jICIFXiEOgsxCuY7DRlnFdiH5ZfvMYtZHRC+zr1fFMap2ty1f2HWDQNVVSo0FDXP4A==
3366-
dependencies:
3367-
"@egjs/hammerjs" "^2.0.17"
3368-
hoist-non-react-statics "^3.3.0"
3369-
invariant "^2.2.4"
3370-
lodash "^4.17.21"
3371-
prop-types "^15.7.2"
3372-
33733343
"react-native@>= 0.64.0":
33743344
version "0.67.1"
33753345
resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.67.1.tgz#a9cc13f1a691e9bb23f146f001e11fc0157af51c"

0 commit comments

Comments
 (0)