react-native-gesture-handler 2.18.1 → 2.20.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -0
- package/android/build.gradle +11 -29
- package/android/fabric/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +1 -1
- package/android/paper/src/main/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +1 -1
- package/android/src/main/AndroidManifest.xml +1 -3
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +21 -21
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +1 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/HoverGestureHandler.kt +16 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +80 -4
- package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/PinchGestureHandler.kt +2 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/ScaleGestureDetector.java +10 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/StylusData.kt +103 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +24 -15
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +3 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/HoverGestureHandlerEventDataBuilder.kt +7 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/PanGestureHandlerEventDataBuilder.kt +7 -0
- package/android/src/main/jni/CMakeLists.txt +18 -9
- package/apple/Handlers/RNFlingHandler.h +1 -0
- package/apple/Handlers/RNFlingHandler.m +153 -19
- package/apple/Handlers/RNHoverHandler.m +44 -2
- package/apple/Handlers/RNLongPressHandler.m +111 -20
- package/apple/Handlers/RNManualHandler.m +53 -29
- package/apple/Handlers/RNNativeViewHandler.mm +22 -15
- package/apple/Handlers/RNPanHandler.m +57 -7
- package/apple/Handlers/RNRotationHandler.m +1 -1
- package/apple/RNGHStylusData.h +77 -0
- package/apple/RNGHStylusData.m +37 -0
- package/apple/RNGHUIKit.h +2 -0
- package/apple/RNGHVector.h +31 -0
- package/apple/RNGHVector.m +67 -0
- package/apple/RNGestureHandler.h +7 -0
- package/apple/{RNGestureHandler.m → RNGestureHandler.mm} +63 -1
- package/apple/RNGestureHandlerButtonComponentView.mm +41 -0
- package/apple/RNGestureHandlerDirection.h +25 -0
- package/apple/RNGestureHandlerEvents.h +3 -1
- package/apple/RNGestureHandlerEvents.m +11 -3
- package/lib/commonjs/PointerType.js +2 -1
- package/lib/commonjs/PointerType.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js +5 -1
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/Pressable/Pressable.js +66 -78
- package/lib/commonjs/components/Pressable/Pressable.js.map +1 -1
- package/lib/commonjs/components/Pressable/index.js +0 -8
- package/lib/commonjs/components/Pressable/index.js.map +1 -1
- package/lib/commonjs/components/Pressable/utils.js +1 -23
- package/lib/commonjs/components/Pressable/utils.js.map +1 -1
- package/lib/commonjs/components/ReanimatedSwipeable.js +60 -41
- package/lib/commonjs/components/ReanimatedSwipeable.js.map +1 -1
- package/lib/commonjs/handlers/GestureHandlerEventPayload.js +4 -0
- package/lib/commonjs/handlers/LongPressGestureHandler.js +1 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +2 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector/utils.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/hoverGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/longPressGesture.js +10 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js +12 -4
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/mocks.js +16 -3
- package/lib/commonjs/mocks.js.map +1 -1
- package/lib/commonjs/utils.js +4 -0
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/constants.js +3 -3
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +2 -3
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/HoverGestureHandler.js +18 -1
- package/lib/commonjs/web/handlers/HoverGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +43 -9
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +14 -3
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +12 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +55 -11
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/KeyboardEventManager.js +110 -0
- package/lib/commonjs/web/tools/KeyboardEventManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerEventManager.js +3 -37
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/Vector.js +4 -2
- package/lib/commonjs/web/tools/Vector.js.map +1 -1
- package/lib/commonjs/web/utils.js +187 -13
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/module/PointerType.js +2 -1
- package/lib/module/PointerType.js.map +1 -1
- package/lib/module/components/GestureButtons.js +5 -1
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/Pressable/Pressable.js +67 -78
- package/lib/module/components/Pressable/Pressable.js.map +1 -1
- package/lib/module/components/Pressable/index.js +0 -1
- package/lib/module/components/Pressable/index.js.map +1 -1
- package/lib/module/components/Pressable/utils.js +1 -22
- package/lib/module/components/Pressable/utils.js.map +1 -1
- package/lib/module/components/ReanimatedSwipeable.js +58 -37
- package/lib/module/components/ReanimatedSwipeable.js.map +1 -1
- package/lib/module/handlers/GestureHandlerEventPayload.js +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js +2 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector/utils.js +2 -2
- package/lib/module/handlers/gestures/GestureDetector/utils.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/hoverGesture.js.map +1 -1
- package/lib/module/handlers/gestures/longPressGesture.js +10 -0
- package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js +12 -4
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/mocks.js +13 -3
- package/lib/module/mocks.js.map +1 -1
- package/lib/module/utils.js +1 -0
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/constants.js +1 -1
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +2 -3
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/HoverGestureHandler.js +18 -1
- package/lib/module/web/handlers/HoverGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +43 -9
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +14 -3
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +12 -1
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +54 -10
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/KeyboardEventManager.js +96 -0
- package/lib/module/web/tools/KeyboardEventManager.js.map +1 -0
- package/lib/module/web/tools/PointerEventManager.js +4 -38
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/Vector.js +5 -3
- package/lib/module/web/tools/Vector.js.map +1 -1
- package/lib/module/web/utils.js +184 -13
- package/lib/module/web/utils.js.map +1 -1
- package/lib/typescript/PointerType.d.ts +2 -1
- package/lib/typescript/components/GestureComponents.d.ts +1 -1
- package/lib/typescript/components/Pressable/index.d.ts +1 -1
- package/lib/typescript/components/Pressable/utils.d.ts +3 -5
- package/lib/typescript/handlers/GestureHandlerEventPayload.d.ts +35 -0
- package/lib/typescript/handlers/LongPressGestureHandler.d.ts +5 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +2 -2
- package/lib/typescript/handlers/gestures/hoverGesture.d.ts +1 -6
- package/lib/typescript/handlers/gestures/longPressGesture.d.ts +5 -0
- package/lib/typescript/handlers/handlersRegistry.d.ts +1 -1
- package/lib/typescript/jestUtils/jestUtils.d.ts +1 -1
- package/lib/typescript/mocks.d.ts +4 -3
- package/lib/typescript/utils.d.ts +1 -0
- package/lib/typescript/web/constants.d.ts +1 -1
- package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -1
- package/lib/typescript/web/handlers/HoverGestureHandler.d.ts +2 -0
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +3 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +3 -1
- package/lib/typescript/web/interfaces.d.ts +9 -4
- package/lib/typescript/web/tools/EventManager.d.ts +2 -2
- package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +1 -0
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +6 -0
- package/lib/typescript/web/tools/KeyboardEventManager.d.ts +13 -0
- package/lib/typescript/web/utils.d.ts +2 -1
- package/package.json +3 -3
- package/src/PointerType.ts +1 -0
- package/src/components/GestureButtons.tsx +2 -1
- package/src/components/GestureComponents.tsx +1 -1
- package/src/components/Pressable/Pressable.tsx +77 -70
- package/src/components/Pressable/index.ts +1 -1
- package/src/components/Pressable/utils.ts +5 -49
- package/src/components/ReanimatedSwipeable.tsx +70 -47
- package/src/handlers/GestureHandlerEventPayload.ts +42 -0
- package/src/handlers/LongPressGestureHandler.ts +6 -0
- package/src/handlers/createHandler.tsx +1 -0
- package/src/handlers/gestures/GestureDetector/utils.ts +2 -2
- package/src/handlers/gestures/gesture.ts +3 -1
- package/src/handlers/gestures/hoverGesture.ts +1 -7
- package/src/handlers/gestures/longPressGesture.ts +9 -0
- package/src/jestUtils/jestUtils.ts +9 -1
- package/src/{mocks.ts → mocks.tsx} +8 -3
- package/src/utils.ts +2 -0
- package/src/web/constants.ts +1 -1
- package/src/web/handlers/GestureHandler.ts +4 -2
- package/src/web/handlers/HoverGestureHandler.ts +16 -2
- package/src/web/handlers/LongPressGestureHandler.ts +49 -10
- package/src/web/handlers/NativeViewGestureHandler.ts +14 -4
- package/src/web/handlers/PanGestureHandler.ts +14 -1
- package/src/web/interfaces.ts +10 -4
- package/src/web/tools/EventManager.ts +2 -4
- package/src/web/tools/GestureHandlerDelegate.ts +1 -0
- package/src/web/tools/GestureHandlerWebDelegate.ts +67 -10
- package/src/web/tools/KeyboardEventManager.ts +91 -0
- package/src/web/tools/PointerEventManager.ts +2 -38
- package/src/web/tools/Vector.ts +4 -3
- package/src/web/utils.ts +188 -13
- package/lib/commonjs/web/tools/TouchEventManager.js +0 -164
- package/lib/commonjs/web/tools/TouchEventManager.js.map +0 -1
- package/lib/module/web/tools/TouchEventManager.js +0 -149
- package/lib/module/web/tools/TouchEventManager.js.map +0 -1
- package/lib/typescript/web/tools/TouchEventManager.d.ts +0 -11
- package/src/web/tools/TouchEventManager.ts +0 -175
@@ -1,9 +1,10 @@
|
|
1
1
|
#import "RNManualHandler.h"
|
2
2
|
|
3
3
|
#if !TARGET_OS_OSX
|
4
|
-
|
5
4
|
@interface RNManualRecognizer : UIGestureRecognizer
|
6
|
-
|
5
|
+
#else
|
6
|
+
@interface RNManualRecognizer : NSGestureRecognizer
|
7
|
+
#endif
|
7
8
|
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
|
8
9
|
|
9
10
|
@end
|
@@ -19,25 +20,27 @@
|
|
19
20
|
_gestureHandler = gestureHandler;
|
20
21
|
_shouldSendBeginEvent = YES;
|
21
22
|
}
|
23
|
+
|
22
24
|
return self;
|
23
25
|
}
|
24
26
|
|
25
|
-
- (void)
|
27
|
+
- (void)interactionsBegan:(NSSet *)touches withEvent:(UIEvent *)event
|
26
28
|
{
|
27
|
-
[_gestureHandler setCurrentPointerType:event];
|
28
|
-
[super touchesBegan:touches withEvent:event];
|
29
29
|
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
30
30
|
|
31
31
|
if (_shouldSendBeginEvent) {
|
32
32
|
[_gestureHandler handleGesture:self];
|
33
|
+
#if TARGET_OS_OSX
|
34
|
+
self.state = NSGestureRecognizerStateBegan;
|
35
|
+
#endif
|
33
36
|
_shouldSendBeginEvent = NO;
|
34
37
|
}
|
35
38
|
}
|
36
39
|
|
37
|
-
- (void)
|
40
|
+
- (void)interactionsMoved:(NSSet *)touches withEvent:(UIEvent *)event
|
38
41
|
{
|
39
|
-
[super touchesMoved:touches withEvent:event];
|
40
42
|
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
|
43
|
+
[_gestureHandler handleGesture:self];
|
41
44
|
|
42
45
|
if ([self shouldFail]) {
|
43
46
|
self.state = (self.state == UIGestureRecognizerStatePossible) ? UIGestureRecognizerStateFailed
|
@@ -47,10 +50,31 @@
|
|
47
50
|
}
|
48
51
|
}
|
49
52
|
|
53
|
+
- (void)interactionsEnded:(NSSet *)touches withEvent:(UIEvent *)event
|
54
|
+
{
|
55
|
+
[_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
|
56
|
+
[_gestureHandler handleGesture:self];
|
57
|
+
}
|
58
|
+
|
59
|
+
#if !TARGET_OS_OSX
|
60
|
+
- (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
|
61
|
+
{
|
62
|
+
[_gestureHandler setCurrentPointerType:event];
|
63
|
+
[super touchesBegan:touches withEvent:event];
|
64
|
+
|
65
|
+
[self interactionsBegan:touches withEvent:event];
|
66
|
+
}
|
67
|
+
|
68
|
+
- (void)touchesMoved:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
|
69
|
+
{
|
70
|
+
[super touchesMoved:touches withEvent:event];
|
71
|
+
[self interactionsMoved:touches withEvent:event];
|
72
|
+
}
|
73
|
+
|
50
74
|
- (void)touchesEnded:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
|
51
75
|
{
|
52
76
|
[super touchesEnded:touches withEvent:event];
|
53
|
-
[
|
77
|
+
[self interactionsEnded:touches withEvent:event];
|
54
78
|
}
|
55
79
|
|
56
80
|
- (void)touchesCancelled:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
|
@@ -60,6 +84,26 @@
|
|
60
84
|
[self reset];
|
61
85
|
}
|
62
86
|
|
87
|
+
#else
|
88
|
+
|
89
|
+
- (void)mouseDown:(NSEvent *)event
|
90
|
+
{
|
91
|
+
[_gestureHandler setCurrentPointerTypeToMouse];
|
92
|
+
[self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
|
93
|
+
}
|
94
|
+
|
95
|
+
- (void)mouseDragged:(NSEvent *)event
|
96
|
+
{
|
97
|
+
[self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
|
98
|
+
}
|
99
|
+
|
100
|
+
- (void)mouseUp:(NSEvent *)event
|
101
|
+
{
|
102
|
+
[self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
|
103
|
+
}
|
104
|
+
|
105
|
+
#endif
|
106
|
+
|
63
107
|
- (void)reset
|
64
108
|
{
|
65
109
|
[_gestureHandler.pointerTracker reset];
|
@@ -71,11 +115,7 @@
|
|
71
115
|
|
72
116
|
- (BOOL)shouldFail
|
73
117
|
{
|
74
|
-
|
75
|
-
return YES;
|
76
|
-
} else {
|
77
|
-
return NO;
|
78
|
-
}
|
118
|
+
return _gestureHandler.shouldCancelWhenOutside && ![_gestureHandler containsPointInView];
|
79
119
|
}
|
80
120
|
|
81
121
|
@end
|
@@ -87,24 +127,8 @@
|
|
87
127
|
if ((self = [super initWithTag:tag])) {
|
88
128
|
_recognizer = [[RNManualRecognizer alloc] initWithGestureHandler:self];
|
89
129
|
}
|
90
|
-
return self;
|
91
|
-
}
|
92
|
-
|
93
|
-
@end
|
94
|
-
|
95
|
-
#else
|
96
|
-
|
97
|
-
@implementation RNManualGestureHandler
|
98
130
|
|
99
|
-
- (instancetype)initWithTag:(NSNumber *)tag
|
100
|
-
{
|
101
|
-
RCTLogWarn(@"ManualGestureHandler is not supported on macOS");
|
102
|
-
if ((self = [super initWithTag:tag])) {
|
103
|
-
_recognizer = [NSGestureRecognizer alloc];
|
104
|
-
}
|
105
131
|
return self;
|
106
132
|
}
|
107
133
|
|
108
134
|
@end
|
109
|
-
|
110
|
-
#endif
|
@@ -44,6 +44,7 @@
|
|
44
44
|
|
45
45
|
- (void)touchesMoved:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
|
46
46
|
{
|
47
|
+
[self updateStateIfScrollView];
|
47
48
|
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
|
48
49
|
}
|
49
50
|
|
@@ -51,7 +52,12 @@
|
|
51
52
|
{
|
52
53
|
[_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
|
53
54
|
self.state = UIGestureRecognizerStateFailed;
|
54
|
-
|
55
|
+
|
56
|
+
// For now, we are handling only the scroll view case.
|
57
|
+
// If more views need special treatment, then we can switch to a delegate pattern
|
58
|
+
if ([_gestureHandler retrieveScrollView:self.view] == nil) {
|
59
|
+
[self reset];
|
60
|
+
}
|
55
61
|
}
|
56
62
|
|
57
63
|
- (void)touchesCancelled:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
|
@@ -92,6 +98,19 @@
|
|
92
98
|
[_gestureHandler reset];
|
93
99
|
}
|
94
100
|
|
101
|
+
- (void)updateStateIfScrollView
|
102
|
+
{
|
103
|
+
RNGHUIScrollView *scrollView = [_gestureHandler retrieveScrollView:self.view];
|
104
|
+
if (!scrollView) {
|
105
|
+
return;
|
106
|
+
}
|
107
|
+
for (UIGestureRecognizer *scrollViewGestureRecognizer in scrollView.gestureRecognizers) {
|
108
|
+
if ([_gestureHandler isUIScrollViewPanGestureRecognizer:scrollViewGestureRecognizer]) {
|
109
|
+
self.state = scrollViewGestureRecognizer.state;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
95
114
|
@end
|
96
115
|
|
97
116
|
#pragma mark RNNativeViewGestureHandler
|
@@ -141,20 +160,8 @@
|
|
141
160
|
// We can restore default scrollview behaviour to delay touches to scrollview's children
|
142
161
|
// because gesture handler system can handle cancellation of scroll recognizer when JS responder
|
143
162
|
// is set
|
144
|
-
|
145
|
-
|
146
|
-
UIScrollView *scrollView = ((RCTScrollViewComponentView *)view).scrollView;
|
147
|
-
scrollView.delaysContentTouches = YES;
|
148
|
-
}
|
149
|
-
#else
|
150
|
-
if ([view isKindOfClass:[RCTScrollView class]]) {
|
151
|
-
// This part of the code is coupled with RN implementation of ScrollView native wrapper and
|
152
|
-
// we expect for RCTScrollView component to contain a subclass of UIScrollview as the only
|
153
|
-
// subview
|
154
|
-
UIScrollView *scrollView = [view.subviews objectAtIndex:0];
|
155
|
-
scrollView.delaysContentTouches = YES;
|
156
|
-
}
|
157
|
-
#endif // RCT_NEW_ARCH_ENABLED
|
163
|
+
UIScrollView *scrollView = [self retrieveScrollView:view];
|
164
|
+
scrollView.delaysContentTouches = YES;
|
158
165
|
}
|
159
166
|
|
160
167
|
- (void)handleTouchDown:(UIView *)sender forEvent:(UIEvent *)event
|
@@ -7,6 +7,7 @@
|
|
7
7
|
//
|
8
8
|
|
9
9
|
#import "RNPanHandler.h"
|
10
|
+
#import "RNGHStylusData.h"
|
10
11
|
|
11
12
|
#if TARGET_OS_OSX
|
12
13
|
|
@@ -31,6 +32,10 @@
|
|
31
32
|
@property (nonatomic) CGFloat failOffsetYEnd;
|
32
33
|
@property (nonatomic) CGFloat activateAfterLongPress;
|
33
34
|
|
35
|
+
#if !TARGET_OS_OSX && !TARGET_OS_TV
|
36
|
+
@property (atomic, readonly, strong) RNGHStylusData *stylusData;
|
37
|
+
#endif
|
38
|
+
|
34
39
|
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
|
35
40
|
|
36
41
|
@end
|
@@ -80,6 +85,28 @@
|
|
80
85
|
}
|
81
86
|
#endif
|
82
87
|
|
88
|
+
#if !TARGET_OS_OSX && !TARGET_OS_TV
|
89
|
+
- (void)tryUpdateStylusData:(UIEvent *)event
|
90
|
+
{
|
91
|
+
UITouch *touch = [[event allTouches] anyObject];
|
92
|
+
|
93
|
+
if (touch.type != UITouchTypePencil) {
|
94
|
+
return;
|
95
|
+
} else if (_stylusData == nil) {
|
96
|
+
_stylusData = [[RNGHStylusData alloc] init];
|
97
|
+
}
|
98
|
+
|
99
|
+
_stylusData.altitudeAngle = touch.altitudeAngle;
|
100
|
+
_stylusData.azimuthAngle = [touch azimuthAngleInView:nil];
|
101
|
+
_stylusData.pressure = touch.force / touch.maximumPossibleForce;
|
102
|
+
|
103
|
+
CGPoint tilts = ghSpherical2tilt(_stylusData.altitudeAngle, _stylusData.azimuthAngle);
|
104
|
+
|
105
|
+
_stylusData.tiltX = tilts.x;
|
106
|
+
_stylusData.tiltY = tilts.y;
|
107
|
+
}
|
108
|
+
#endif
|
109
|
+
|
83
110
|
- (void)activateAfterLongPress
|
84
111
|
{
|
85
112
|
self.state = UIGestureRecognizerStateBegan;
|
@@ -102,6 +129,8 @@
|
|
102
129
|
} else {
|
103
130
|
super.minimumNumberOfTouches = _realMinimumNumberOfTouches;
|
104
131
|
}
|
132
|
+
|
133
|
+
[self tryUpdateStylusData:event];
|
105
134
|
#endif
|
106
135
|
|
107
136
|
#if TARGET_OS_OSX
|
@@ -150,17 +179,28 @@
|
|
150
179
|
[self setTranslation:CGPointMake(0, 0) inView:self.view];
|
151
180
|
}
|
152
181
|
}
|
182
|
+
|
183
|
+
[self tryUpdateStylusData:event];
|
153
184
|
#endif
|
154
185
|
}
|
155
186
|
|
156
187
|
- (void)interactionsEnded:(NSSet *)touches withEvent:(UIEvent *)event
|
157
188
|
{
|
158
189
|
[_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
|
190
|
+
|
191
|
+
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
192
|
+
[self tryUpdateStylusData:event];
|
193
|
+
#endif
|
159
194
|
}
|
160
195
|
|
161
196
|
- (void)interactionsCancelled:(NSSet *)touches withEvent:(UIEvent *)event
|
162
197
|
{
|
163
198
|
[_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
|
199
|
+
|
200
|
+
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
201
|
+
[self tryUpdateStylusData:event];
|
202
|
+
#endif
|
203
|
+
|
164
204
|
[self reset];
|
165
205
|
}
|
166
206
|
|
@@ -224,6 +264,10 @@
|
|
224
264
|
self.enabled = YES;
|
225
265
|
[super reset];
|
226
266
|
[_gestureHandler reset];
|
267
|
+
|
268
|
+
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
269
|
+
_stylusData = nil;
|
270
|
+
#endif
|
227
271
|
}
|
228
272
|
|
229
273
|
- (void)updateHasCustomActivationCriteria
|
@@ -405,17 +449,23 @@
|
|
405
449
|
withTranslation:[recognizer translationInView:recognizer.view.window.contentView]
|
406
450
|
withVelocity:[recognizer velocityInView:recognizer.view.window.contentView]
|
407
451
|
withNumberOfTouches:1
|
408
|
-
withPointerType:RNGestureHandlerMouse
|
452
|
+
withPointerType:RNGestureHandlerMouse
|
453
|
+
withStylusData:nil];
|
409
454
|
}
|
410
455
|
#else
|
411
456
|
- (RNGestureHandlerEventExtraData *)eventExtraData:(UIPanGestureRecognizer *)recognizer
|
412
457
|
{
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
458
|
+
RNBetterPanGestureRecognizer *panRecognizer = (RNBetterPanGestureRecognizer *)recognizer;
|
459
|
+
|
460
|
+
return [RNGestureHandlerEventExtraData
|
461
|
+
forPan:[recognizer locationInView:recognizer.view]
|
462
|
+
withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
|
463
|
+
withTranslation:[recognizer translationInView:recognizer.view.window]
|
464
|
+
withVelocity:[recognizer velocityInView:recognizer.view.window]
|
465
|
+
withNumberOfTouches:recognizer.numberOfTouches
|
466
|
+
withPointerType:_pointerType
|
467
|
+
withStylusData:[panRecognizer.stylusData toDictionary]]; // In Objective-C calling method on nil returns
|
468
|
+
// nil, therefore this line does not crash.
|
419
469
|
}
|
420
470
|
#endif
|
421
471
|
|
@@ -149,7 +149,7 @@
|
|
149
149
|
#if TARGET_OS_OSX
|
150
150
|
- (RNGestureHandlerEventExtraData *)eventExtraData:(NSRotationGestureRecognizer *)recognizer
|
151
151
|
{
|
152
|
-
return [RNGestureHandlerEventExtraData forRotation
|
152
|
+
return [RNGestureHandlerEventExtraData forRotation:-recognizer.rotation
|
153
153
|
withAnchorPoint:[recognizer locationInView:recognizer.view]
|
154
154
|
withVelocity:((RNBetterRotationRecognizer *)recognizer).velocity
|
155
155
|
withNumberOfTouches:2
|
@@ -0,0 +1,77 @@
|
|
1
|
+
//
|
2
|
+
// RNGHStylusData.h
|
3
|
+
// Pods
|
4
|
+
//
|
5
|
+
// Created by Michał Bert on 18/09/2024.
|
6
|
+
//
|
7
|
+
|
8
|
+
#ifndef RNGHStylusData_h
|
9
|
+
#define RNGHStylusData_h
|
10
|
+
|
11
|
+
@interface RNGHStylusData : NSObject
|
12
|
+
|
13
|
+
@property (atomic, assign) double tiltX;
|
14
|
+
@property (atomic, assign) double tiltY;
|
15
|
+
@property (atomic, assign) double altitudeAngle;
|
16
|
+
@property (atomic, assign) double azimuthAngle;
|
17
|
+
@property (atomic, assign) double pressure;
|
18
|
+
|
19
|
+
- (NSDictionary *)toDictionary;
|
20
|
+
|
21
|
+
@end
|
22
|
+
|
23
|
+
static CGPoint ghSpherical2tilt(double altitudeAngle, double azimuthAngle)
|
24
|
+
{
|
25
|
+
CGPoint tilts = {.x = 0.0, .y = 0.0};
|
26
|
+
|
27
|
+
const double radToDeg = 180 / M_PI;
|
28
|
+
const double eps = 0.000000001;
|
29
|
+
|
30
|
+
if (altitudeAngle < eps) {
|
31
|
+
// the pen is in the X-Y plane
|
32
|
+
if (azimuthAngle < eps || fabs(azimuthAngle - 2 * M_PI) < eps) {
|
33
|
+
// pen is on positive X axis
|
34
|
+
tilts.x = M_PI_2;
|
35
|
+
}
|
36
|
+
if (fabs(azimuthAngle - M_PI_2) < eps) {
|
37
|
+
// pen is on positive Y axis
|
38
|
+
tilts.y = M_PI_2;
|
39
|
+
}
|
40
|
+
if (fabs(azimuthAngle - M_PI) < eps) {
|
41
|
+
// pen is on negative X axis
|
42
|
+
tilts.x = -M_PI_2;
|
43
|
+
}
|
44
|
+
if (fabs(azimuthAngle - 3 * M_PI_2) < eps) {
|
45
|
+
// pen is on negative Y axis
|
46
|
+
tilts.y = -M_PI_2;
|
47
|
+
}
|
48
|
+
if (azimuthAngle > eps && fabs(azimuthAngle - M_PI_2) < eps) {
|
49
|
+
tilts.x = M_PI_2;
|
50
|
+
tilts.y = M_PI_2;
|
51
|
+
}
|
52
|
+
if (fabs(azimuthAngle - M_PI_2) > eps && fabs(azimuthAngle - M_PI) < eps) {
|
53
|
+
tilts.x = -M_PI_2;
|
54
|
+
tilts.y = M_PI_2;
|
55
|
+
}
|
56
|
+
if (azimuthAngle - M_PI > eps && fabs(azimuthAngle - 3 * M_PI_2) < eps) {
|
57
|
+
tilts.x = -M_PI_2;
|
58
|
+
tilts.y = -M_PI_2;
|
59
|
+
}
|
60
|
+
if (fabs(azimuthAngle - 3 * M_PI_2) > eps && fabs(azimuthAngle - 2 * M_PI) < eps) {
|
61
|
+
tilts.x = M_PI_2;
|
62
|
+
tilts.y = -M_PI_2;
|
63
|
+
}
|
64
|
+
} else {
|
65
|
+
const double tanAlt = tan(altitudeAngle);
|
66
|
+
|
67
|
+
tilts.x = atan(cos(azimuthAngle) / tanAlt);
|
68
|
+
tilts.y = atan(sin(azimuthAngle) / tanAlt);
|
69
|
+
}
|
70
|
+
|
71
|
+
tilts.x = round(tilts.x * radToDeg);
|
72
|
+
tilts.y = round(tilts.y * radToDeg);
|
73
|
+
|
74
|
+
return tilts;
|
75
|
+
}
|
76
|
+
|
77
|
+
#endif /* RNGHStylusData_h */
|
@@ -0,0 +1,37 @@
|
|
1
|
+
//
|
2
|
+
// RNGHStylusData.m
|
3
|
+
// DoubleConversion
|
4
|
+
//
|
5
|
+
// Created by Michał Bert on 18/09/2024.
|
6
|
+
//
|
7
|
+
|
8
|
+
#import "RNGHStylusData.h"
|
9
|
+
#import <Foundation/Foundation.h>
|
10
|
+
|
11
|
+
@implementation RNGHStylusData
|
12
|
+
|
13
|
+
- (instancetype)init
|
14
|
+
{
|
15
|
+
if (self = [super init]) {
|
16
|
+
self.tiltX = 0;
|
17
|
+
self.tiltY = 0;
|
18
|
+
self.altitudeAngle = M_PI_2;
|
19
|
+
self.azimuthAngle = 0;
|
20
|
+
self.pressure = 0;
|
21
|
+
}
|
22
|
+
|
23
|
+
return self;
|
24
|
+
}
|
25
|
+
|
26
|
+
- (NSDictionary *)toDictionary
|
27
|
+
{
|
28
|
+
return @{
|
29
|
+
@"tiltX" : @(_tiltX),
|
30
|
+
@"tiltY" : @(_tiltY),
|
31
|
+
@"altitudeAngle" : @(_altitudeAngle),
|
32
|
+
@"azimuthAngle" : @(_azimuthAngle),
|
33
|
+
@"pressure" : @(_pressure),
|
34
|
+
};
|
35
|
+
}
|
36
|
+
|
37
|
+
@end
|
package/apple/RNGHUIKit.h
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
|
5
5
|
typedef UIView RNGHUIView;
|
6
6
|
typedef UITouch RNGHUITouch;
|
7
|
+
typedef UIScrollView RNGHUIScrollView;
|
7
8
|
|
8
9
|
#define RNGHGestureRecognizerStateFailed UIGestureRecognizerStateFailed;
|
9
10
|
#define RNGHGestureRecognizerStatePossible UIGestureRecognizerStatePossible;
|
@@ -17,6 +18,7 @@ typedef UITouch RNGHUITouch;
|
|
17
18
|
|
18
19
|
typedef RCTUIView RNGHUIView;
|
19
20
|
typedef RCTUITouch RNGHUITouch;
|
21
|
+
typedef NSScrollView RNGHUIScrollView;
|
20
22
|
|
21
23
|
#define RNGHGestureRecognizerStateFailed NSGestureRecognizerStateFailed;
|
22
24
|
#define RNGHGestureRecognizerStatePossible NSGestureRecognizerStatePossible;
|
@@ -0,0 +1,31 @@
|
|
1
|
+
//
|
2
|
+
// RNGHVector.h
|
3
|
+
// Pods
|
4
|
+
//
|
5
|
+
// Created by Michał Bert on 05/08/2024.
|
6
|
+
//
|
7
|
+
|
8
|
+
#import "RNGestureHandlerDirection.h"
|
9
|
+
|
10
|
+
#ifndef RNGHVector_h
|
11
|
+
#define RNGHVector_h
|
12
|
+
|
13
|
+
@interface Vector : NSObject
|
14
|
+
|
15
|
+
@property (atomic, readonly, assign) double x;
|
16
|
+
@property (atomic, readonly, assign) double y;
|
17
|
+
@property (atomic, readonly, assign) double unitX;
|
18
|
+
@property (atomic, readonly, assign) double unitY;
|
19
|
+
@property (atomic, readonly, assign) double magnitude;
|
20
|
+
|
21
|
+
+ (Vector *_Nonnull)fromDirection:(RNGestureHandlerDirection)direction;
|
22
|
+
+ (Vector *_Nonnull)fromVelocityX:(double)vx withVelocityY:(double)vy;
|
23
|
+
- (nonnull instancetype)initWithX:(double)x withY:(double)y;
|
24
|
+
- (double)computeSimilarity:(Vector *_Nonnull)other;
|
25
|
+
- (BOOL)isSimilar:(Vector *_Nonnull)other withThreshold:(double)threshold;
|
26
|
+
|
27
|
+
@end
|
28
|
+
|
29
|
+
static double MINIMAL_RECOGNIZABLE_MAGNITUDE = 0.1;
|
30
|
+
|
31
|
+
#endif /* RNGHVector_h */
|
@@ -0,0 +1,67 @@
|
|
1
|
+
//
|
2
|
+
// RNGHVector.m
|
3
|
+
// DoubleConversion
|
4
|
+
//
|
5
|
+
// Created by Michał Bert on 05/08/2024.
|
6
|
+
//
|
7
|
+
|
8
|
+
#import "RNGHVector.h"
|
9
|
+
#import <Foundation/Foundation.h>
|
10
|
+
|
11
|
+
@implementation Vector
|
12
|
+
|
13
|
+
- (id)initWithX:(double)x withY:(double)y
|
14
|
+
{
|
15
|
+
if (self = [super init]) {
|
16
|
+
_x = x;
|
17
|
+
_y = y;
|
18
|
+
|
19
|
+
_magnitude = hypot(x, y);
|
20
|
+
|
21
|
+
_unitX = self.magnitude > MINIMAL_RECOGNIZABLE_MAGNITUDE ? x / self.magnitude : 0;
|
22
|
+
_unitY = self.magnitude > MINIMAL_RECOGNIZABLE_MAGNITUDE ? y / self.magnitude : 0;
|
23
|
+
}
|
24
|
+
|
25
|
+
return self;
|
26
|
+
}
|
27
|
+
|
28
|
+
+ (Vector *)fromDirection:(RNGestureHandlerDirection)direction
|
29
|
+
{
|
30
|
+
switch (direction) {
|
31
|
+
case RNGestureHandlerDirectionRight:
|
32
|
+
return [[Vector alloc] initWithX:1 withY:0];
|
33
|
+
case RNGestureHandlerDirectionLeft:
|
34
|
+
return [[Vector alloc] initWithX:-1 withY:0];
|
35
|
+
case RNGestureHandlerDirectionUp:
|
36
|
+
return [[Vector alloc] initWithX:0 withY:1];
|
37
|
+
case RNGestureHandlerDirectionDown:
|
38
|
+
return [[Vector alloc] initWithX:0 withY:-1];
|
39
|
+
case RNGestureHandlerDirectionUpLeft:
|
40
|
+
return [[Vector alloc] initWithX:-1 withY:1];
|
41
|
+
case RNGestureHandlerDirectionUpRight:
|
42
|
+
return [[Vector alloc] initWithX:1 withY:1];
|
43
|
+
case RNGestureHandlerDirectionDownLeft:
|
44
|
+
return [[Vector alloc] initWithX:-1 withY:-1];
|
45
|
+
case RNGestureHandlerDirectionDownRight:
|
46
|
+
return [[Vector alloc] initWithX:1 withY:-1];
|
47
|
+
default:
|
48
|
+
return [[Vector alloc] initWithX:0 withY:0];
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
+ (Vector *)fromVelocityX:(double)vx withVelocityY:(double)vy;
|
53
|
+
{
|
54
|
+
return [[Vector alloc] initWithX:vx withY:vy];
|
55
|
+
}
|
56
|
+
|
57
|
+
- (double)computeSimilarity:(Vector *)other
|
58
|
+
{
|
59
|
+
return self.unitX * other.unitX + self.unitY * other.unitY;
|
60
|
+
}
|
61
|
+
|
62
|
+
- (BOOL)isSimilar:(Vector *)other withThreshold:(double)threshold
|
63
|
+
{
|
64
|
+
return [self computeSimilarity:other] > threshold;
|
65
|
+
}
|
66
|
+
|
67
|
+
@end
|
package/apple/RNGestureHandler.h
CHANGED
@@ -89,6 +89,13 @@
|
|
89
89
|
withExtraData:(nonnull RNGestureHandlerEventExtraData *)extraData;
|
90
90
|
- (void)sendEvent:(nonnull RNGestureHandlerStateChange *)event;
|
91
91
|
- (void)sendTouchEventInState:(RNGestureHandlerState)state forViewWithTag:(nonnull NSNumber *)reactTag;
|
92
|
+
- (nullable RNGHUIScrollView *)retrieveScrollView:(nonnull RNGHUIView *)view;
|
93
|
+
|
94
|
+
#if !TARGET_OS_OSX
|
95
|
+
- (BOOL)isUIScrollViewPanGestureRecognizer:(nonnull UIGestureRecognizer *)gestureRecognizer;
|
96
|
+
#else
|
97
|
+
- (BOOL)isUIScrollViewPanGestureRecognizer:(nonnull NSGestureRecognizer *)gestureRecognizer;
|
98
|
+
#endif
|
92
99
|
|
93
100
|
#if !TARGET_OS_OSX
|
94
101
|
- (void)setCurrentPointerType:(nonnull UIEvent *)event;
|
@@ -5,10 +5,17 @@
|
|
5
5
|
|
6
6
|
#if !TARGET_OS_OSX
|
7
7
|
#import <UIKit/UIGestureRecognizerSubclass.h>
|
8
|
+
#import <UIKit/UIPanGestureRecognizer.h>
|
8
9
|
#endif
|
9
10
|
|
10
11
|
#import <React/UIView+React.h>
|
11
12
|
|
13
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
14
|
+
#import <React/RCTScrollViewComponentView.h>
|
15
|
+
#else
|
16
|
+
#import <React/RCTScrollView.h>
|
17
|
+
#endif
|
18
|
+
|
12
19
|
@interface UIGestureRecognizer (GestureHandler)
|
13
20
|
@property (nonatomic, readonly) RNGestureHandler *gestureHandler;
|
14
21
|
@end
|
@@ -205,7 +212,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
|
|
205
212
|
|
206
213
|
- (UITouchType)getPointerType
|
207
214
|
{
|
208
|
-
return _pointerType;
|
215
|
+
return (UITouchType)_pointerType;
|
209
216
|
}
|
210
217
|
|
211
218
|
- (void)bindToView:(RNGHUIView *)view
|
@@ -474,6 +481,10 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
|
|
474
481
|
return YES;
|
475
482
|
}
|
476
483
|
|
484
|
+
if ([self areScrollViewRecognizersCompatible:gestureRecognizer otherRecognizer:otherGestureRecognizer]) {
|
485
|
+
return YES;
|
486
|
+
}
|
487
|
+
|
477
488
|
RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
|
478
489
|
if (handler != nil) {
|
479
490
|
if ([_simultaneousHandlers count]) {
|
@@ -495,6 +506,57 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
|
|
495
506
|
return NO;
|
496
507
|
}
|
497
508
|
|
509
|
+
- (BOOL)areScrollViewRecognizersCompatible:(UIGestureRecognizer *)gestureRecognizer
|
510
|
+
otherRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
|
511
|
+
{
|
512
|
+
if ([self isUIScrollViewPanGestureRecognizer:otherGestureRecognizer] &&
|
513
|
+
[gestureRecognizer isKindOfClass:[RNDummyGestureRecognizer class]]) {
|
514
|
+
RNGHUIScrollView *scrollView = [self retrieveScrollView:gestureRecognizer.view];
|
515
|
+
if (scrollView && scrollView == otherGestureRecognizer.view) {
|
516
|
+
return YES;
|
517
|
+
}
|
518
|
+
}
|
519
|
+
|
520
|
+
return NO;
|
521
|
+
}
|
522
|
+
|
523
|
+
#if !TARGET_OS_OSX
|
524
|
+
// is UIPanGestureRecognizer and has scrollView property
|
525
|
+
- (BOOL)isUIScrollViewPanGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
526
|
+
{
|
527
|
+
return [gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] &&
|
528
|
+
[gestureRecognizer respondsToSelector:@selector(scrollView)];
|
529
|
+
}
|
530
|
+
|
531
|
+
#else
|
532
|
+
|
533
|
+
- (BOOL)isUIScrollViewPanGestureRecognizer:(NSGestureRecognizer *)gestureRecognizer
|
534
|
+
{
|
535
|
+
return NO;
|
536
|
+
}
|
537
|
+
|
538
|
+
#endif
|
539
|
+
|
540
|
+
- (RNGHUIScrollView *)retrieveScrollView:(RNGHUIView *)view
|
541
|
+
{
|
542
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
543
|
+
if ([view isKindOfClass:[RCTScrollViewComponentView class]]) {
|
544
|
+
RNGHUIScrollView *scrollView = ((RCTScrollViewComponentView *)view).scrollView;
|
545
|
+
return scrollView;
|
546
|
+
}
|
547
|
+
#else
|
548
|
+
if ([view isKindOfClass:[RCTScrollView class]]) {
|
549
|
+
// This part of the code is coupled with RN implementation of ScrollView native wrapper and
|
550
|
+
// we expect for RCTScrollView component to contain a subclass of UIScrollview as the only
|
551
|
+
// subview
|
552
|
+
RNGHUIScrollView *scrollView = [view.subviews objectAtIndex:0];
|
553
|
+
return scrollView;
|
554
|
+
}
|
555
|
+
#endif
|
556
|
+
|
557
|
+
return nil;
|
558
|
+
}
|
559
|
+
|
498
560
|
- (void)reset
|
499
561
|
{
|
500
562
|
// do not reset states while gesture is tracking pointers, as gestureRecognizerShouldBegin
|