react-native-gesture-handler 2.7.1 → 2.9.0
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.
- package/RNGestureHandler.podspec +1 -1
- package/android/build.gradle +53 -46
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
- package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +8 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +20 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +40 -15
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
- package/android/src/main/jni/CMakeLists.txt +10 -44
- package/android/src/main/jni/cpp-adapter.cpp +16 -13
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
- package/ios/Handlers/RNFlingHandler.m +39 -37
- package/ios/Handlers/RNForceTouchHandler.m +19 -17
- package/ios/Handlers/RNLongPressHandler.m +20 -22
- package/ios/Handlers/RNManualHandler.m +23 -8
- package/ios/Handlers/RNNativeViewHandler.mm +92 -88
- package/ios/Handlers/RNPanHandler.m +28 -32
- package/ios/Handlers/RNPinchHandler.m +9 -10
- package/ios/Handlers/RNRotationHandler.m +11 -14
- package/ios/Handlers/RNTapHandler.m +26 -26
- package/ios/RNGestureHandler.h +31 -24
- package/ios/RNGestureHandler.m +278 -273
- package/ios/RNGestureHandlerActionType.h +6 -4
- package/ios/RNGestureHandlerButton.m +11 -12
- package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
- package/ios/RNGestureHandlerButtonManager.m +6 -5
- package/ios/RNGestureHandlerDirection.h +4 -4
- package/ios/RNGestureHandlerEvents.h +3 -4
- package/ios/RNGestureHandlerEvents.m +114 -119
- package/ios/RNGestureHandlerManager.h +1 -2
- package/ios/RNGestureHandlerManager.mm +176 -178
- package/ios/RNGestureHandlerModule.h +1 -2
- package/ios/RNGestureHandlerModule.mm +126 -122
- package/ios/RNGestureHandlerPointerTracker.h +1 -1
- package/ios/RNGestureHandlerPointerTracker.m +40 -37
- package/ios/RNGestureHandlerRegistry.h +3 -1
- package/ios/RNGestureHandlerRegistry.m +24 -22
- package/ios/RNGestureHandlerState.h +6 -6
- package/ios/RNGestureHandlerStateManager.h +1 -1
- package/ios/RNManualActivationRecognizer.m +9 -9
- package/ios/RNRootViewGestureRecognizer.m +36 -39
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +1 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/gestureHandlerRootHOC.js +2 -1
- package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +2 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js +3 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/TapGestureHandler.js +3 -1
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js +87 -38
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/longPressGesture.js +1 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/tapGesture.js +1 -0
- package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +28 -3
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +0 -2
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -2
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -2
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js +4 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
- package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +117 -0
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +1 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/gestureHandlerRootHOC.js +2 -1
- package/lib/module/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +2 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js +3 -1
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/TapGestureHandler.js +3 -1
- package/lib/module/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -2
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +89 -39
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/longPressGesture.js +1 -0
- package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/module/handlers/gestures/tapGesture.js +1 -0
- package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +0 -1
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +28 -3
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +0 -2
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -2
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +0 -5
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -2
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js +4 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/web_hammer/PanGestureHandler.js +25 -6
- package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
- package/lib/typescript/components/DrawerLayout.d.ts +10 -1
- package/lib/typescript/components/Swipeable.d.ts +3 -2
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +1 -1
- package/lib/typescript/gestureHandlerRootHOC.d.ts +1 -1
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
- package/lib/typescript/web/interfaces.d.ts +3 -1
- package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
- package/package.json +17 -14
- package/src/RNGestureHandlerModule.macos.ts +2 -2
- package/src/RNGestureHandlerModule.web.ts +2 -2
- package/src/RNGestureHandlerModule.windows.ts +140 -0
- package/src/components/DrawerLayout.tsx +22 -12
- package/src/components/Swipeable.tsx +16 -13
- package/src/components/touchables/TouchableOpacity.tsx +1 -1
- package/src/gestureHandlerRootHOC.tsx +4 -1
- package/src/getShadowNodeFromRef.ts +3 -3
- package/src/handlers/LongPressGestureHandler.ts +3 -1
- package/src/handlers/TapGestureHandler.ts +3 -1
- package/src/handlers/createHandler.tsx +13 -15
- package/src/handlers/gestureHandlerCommon.ts +9 -4
- package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
- package/src/handlers/gestures/GestureDetector.tsx +117 -44
- package/src/handlers/gestures/eventReceiver.ts +2 -1
- package/src/handlers/gestures/gesture.ts +8 -12
- package/src/handlers/gestures/longPressGesture.ts +1 -0
- package/src/handlers/gestures/tapGesture.ts +1 -0
- package/src/jestUtils/jestUtils.ts +3 -4
- package/src/web/detectors/RotationGestureDetector.ts +2 -1
- package/src/web/handlers/FlingGestureHandler.ts +2 -3
- package/src/web/handlers/GestureHandler.ts +30 -11
- package/src/web/handlers/LongPressGestureHandler.ts +0 -3
- package/src/web/handlers/ManualGestureHandler.ts +10 -1
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -2
- package/src/web/handlers/PanGestureHandler.ts +0 -6
- package/src/web/handlers/PinchGestureHandler.ts +0 -2
- package/src/web/handlers/RotationGestureHandler.ts +2 -5
- package/src/web/handlers/TapGestureHandler.ts +0 -3
- package/src/web/interfaces.ts +3 -0
- package/src/web/tools/InteractionManager.ts +2 -3
- package/src/web_hammer/GestureHandler.ts +6 -8
- package/src/web_hammer/NodeManager.ts +3 -1
- package/src/web_hammer/PanGestureHandler.ts +12 -6
- package/android/lib/build.gradle +0 -28
|
@@ -3,57 +3,23 @@ cmake_minimum_required(VERSION 3.9.0)
|
|
|
3
3
|
|
|
4
4
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
5
5
|
set(CMAKE_CXX_STANDARD 17)
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
set(REACT_ANDROID_DIR "${REACT_NATIVE_DIR}/ReactAndroid")
|
|
8
|
+
|
|
9
|
+
include(${REACT_ANDROID_DIR}/cmake-utils/folly-flags.cmake)
|
|
10
|
+
add_compile_options(${folly_FLAGS})
|
|
7
11
|
|
|
8
12
|
add_library(gesturehandler
|
|
9
13
|
SHARED
|
|
10
14
|
cpp-adapter.cpp
|
|
11
15
|
)
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
set(REACT_COMMON_DIR "${REACT_NATIVE_DIR}/ReactCommon")
|
|
15
|
-
set(REACT_NDK_EXPORT_DIR "${APP_BUILD_DIR}/react-ndk/exported")
|
|
16
|
-
|
|
17
|
-
# copied from react-native/ReactAndroid/cmake-utils/Android-prebuilt.cmake
|
|
18
|
-
|
|
19
|
-
## jsi
|
|
20
|
-
add_library(jsi SHARED IMPORTED GLOBAL)
|
|
21
|
-
set_target_properties(jsi
|
|
22
|
-
PROPERTIES
|
|
23
|
-
IMPORTED_LOCATION
|
|
24
|
-
${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libjsi.so)
|
|
25
|
-
target_include_directories(jsi INTERFACE ${REACT_COMMON_DIR}/jsi)
|
|
26
|
-
|
|
27
|
-
## react_render_core
|
|
28
|
-
add_library(react_render_core SHARED IMPORTED GLOBAL)
|
|
29
|
-
set_target_properties(react_render_core
|
|
30
|
-
PROPERTIES
|
|
31
|
-
IMPORTED_LOCATION
|
|
32
|
-
${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_core.so)
|
|
33
|
-
target_include_directories(react_render_core
|
|
34
|
-
INTERFACE
|
|
35
|
-
${REACT_COMMON_DIR}
|
|
36
|
-
${REACT_COMMON_DIR}/react/renderer/core)
|
|
37
|
-
|
|
38
|
-
## react_render_uimanager
|
|
39
|
-
add_library(react_render_uimanager SHARED IMPORTED GLOBAL)
|
|
40
|
-
set_target_properties(react_render_uimanager
|
|
41
|
-
PROPERTIES
|
|
42
|
-
IMPORTED_LOCATION
|
|
43
|
-
${REACT_NDK_EXPORT_DIR}/${ANDROID_ABI}/libreact_render_uimanager.so)
|
|
44
|
-
target_include_directories(react_render_uimanager INTERFACE ${REACT_COMMON_DIR}/react/renderer/uimanager)
|
|
45
|
-
|
|
46
|
-
target_include_directories(
|
|
47
|
-
gesturehandler
|
|
48
|
-
PRIVATE
|
|
49
|
-
"${REACT_ANDROID_DIR}/build/third-party-ndk/boost/boost_1_76_0"
|
|
50
|
-
"${REACT_ANDROID_DIR}/build/third-party-ndk/double-conversion"
|
|
51
|
-
"${REACT_ANDROID_DIR}/build/third-party-ndk/folly"
|
|
52
|
-
)
|
|
17
|
+
find_package(ReactAndroid REQUIRED CONFIG)
|
|
53
18
|
|
|
54
19
|
target_link_libraries(
|
|
55
20
|
gesturehandler
|
|
56
|
-
|
|
57
|
-
react_render_uimanager
|
|
58
|
-
|
|
21
|
+
ReactAndroid::react_render_core
|
|
22
|
+
ReactAndroid::react_render_uimanager
|
|
23
|
+
ReactAndroid::jsi
|
|
24
|
+
ReactAndroid::react_nativemodule_core
|
|
59
25
|
)
|
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
using namespace facebook;
|
|
7
7
|
using namespace react;
|
|
8
8
|
|
|
9
|
-
void decorateRuntime(jsi::Runtime &runtime)
|
|
10
|
-
{
|
|
9
|
+
void decorateRuntime(jsi::Runtime &runtime) {
|
|
11
10
|
auto isFormsStackingContext = jsi::Function::createFromHostFunction(
|
|
12
11
|
runtime,
|
|
13
12
|
jsi::PropNameID::forAscii(runtime, "isFormsStackingContext"),
|
|
@@ -15,27 +14,31 @@ void decorateRuntime(jsi::Runtime &runtime)
|
|
|
15
14
|
[](jsi::Runtime &runtime,
|
|
16
15
|
const jsi::Value &thisValue,
|
|
17
16
|
const jsi::Value *arguments,
|
|
18
|
-
size_t count) -> jsi::Value
|
|
19
|
-
|
|
20
|
-
if (!arguments[0].isObject())
|
|
21
|
-
{
|
|
17
|
+
size_t count) -> jsi::Value {
|
|
18
|
+
if (!arguments[0].isObject()) {
|
|
22
19
|
return jsi::Value::null();
|
|
23
20
|
}
|
|
24
21
|
|
|
25
|
-
auto shadowNode = arguments[0]
|
|
26
|
-
|
|
22
|
+
auto shadowNode = arguments[0]
|
|
23
|
+
.asObject(runtime)
|
|
24
|
+
.getHostObject<ShadowNodeWrapper>(runtime)
|
|
25
|
+
->shadowNode;
|
|
26
|
+
bool isFormsStackingContext = shadowNode->getTraits().check(
|
|
27
|
+
ShadowNodeTraits::FormsStackingContext);
|
|
27
28
|
|
|
28
29
|
return jsi::Value(isFormsStackingContext);
|
|
29
30
|
});
|
|
30
|
-
runtime.global().setProperty(
|
|
31
|
+
runtime.global().setProperty(
|
|
32
|
+
runtime, "isFormsStackingContext", std::move(isFormsStackingContext));
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
extern "C" JNIEXPORT void JNICALL
|
|
34
|
-
Java_com_swmansion_gesturehandler_react_RNGestureHandlerModule_decorateRuntime(
|
|
35
|
-
|
|
36
|
+
Java_com_swmansion_gesturehandler_react_RNGestureHandlerModule_decorateRuntime(
|
|
37
|
+
JNIEnv *env,
|
|
38
|
+
jobject clazz,
|
|
39
|
+
jlong jsiPtr) {
|
|
36
40
|
jsi::Runtime *runtime = reinterpret_cast<jsi::Runtime *>(jsiPtr);
|
|
37
|
-
if (runtime)
|
|
38
|
-
{
|
|
41
|
+
if (runtime) {
|
|
39
42
|
decorateRuntime(*runtime);
|
|
40
43
|
}
|
|
41
44
|
}
|
|
@@ -5,9 +5,9 @@ import com.facebook.react.uimanager.UIManagerModule
|
|
|
5
5
|
import com.facebook.react.uimanager.events.Event
|
|
6
6
|
|
|
7
7
|
fun ReactContext.dispatchEvent(event: Event<*>) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
try {
|
|
9
|
+
this.getNativeModule(UIManagerModule::class.java)!!.eventDispatcher.dispatchEvent(event)
|
|
10
|
+
} catch (e: NullPointerException) {
|
|
11
|
+
throw Exception("Couldn't get an instance of UIManagerModule. Gesture Handler is unable to send an event.", e)
|
|
12
|
+
}
|
|
13
13
|
}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
@interface RNBetterSwipeGestureRecognizer : UISwipeGestureRecognizer
|
|
4
4
|
|
|
5
|
-
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
|
|
5
|
+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
|
|
6
6
|
|
|
7
7
|
@end
|
|
8
8
|
|
|
9
9
|
@implementation RNBetterSwipeGestureRecognizer {
|
|
10
|
-
__weak RNGestureHandler*
|
|
10
|
+
__weak RNGestureHandler *_gestureHandler;
|
|
11
11
|
CGPoint _lastPoint; // location of the most recently updated touch, relative to the view
|
|
12
12
|
bool _hasBegan; // whether the `BEGAN` event has been sent
|
|
13
13
|
}
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
_lastPoint = [[[touches allObjects] objectAtIndex:0] locationInView:_gestureHandler.recognizer.view];
|
|
28
28
|
[_gestureHandler reset];
|
|
29
29
|
[super touchesBegan:touches withEvent:event];
|
|
30
|
+
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
|
30
31
|
|
|
31
32
|
// self.numberOfTouches doesn't work for this because in case than one finger is required,
|
|
32
33
|
// when holding one finger on the screen and tapping with the second one, numberOfTouches is equal
|
|
@@ -35,8 +36,6 @@
|
|
|
35
36
|
[self triggerAction];
|
|
36
37
|
_hasBegan = YES;
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
|
@@ -73,7 +72,8 @@
|
|
|
73
72
|
[super reset];
|
|
74
73
|
}
|
|
75
74
|
|
|
76
|
-
- (CGPoint)getLastLocation
|
|
75
|
+
- (CGPoint)getLastLocation
|
|
76
|
+
{
|
|
77
77
|
// I think keeping the location of only one touch is enough since it would be used to determine the direction
|
|
78
78
|
// of the movement, and if it's wrong the recognizer fails anyway.
|
|
79
79
|
// In case the location of all touches is required, touch events are the way to go
|
|
@@ -103,48 +103,50 @@
|
|
|
103
103
|
|
|
104
104
|
- (void)configure:(NSDictionary *)config
|
|
105
105
|
{
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
106
|
+
[super configure:config];
|
|
107
|
+
UISwipeGestureRecognizer *recognizer = (UISwipeGestureRecognizer *)_recognizer;
|
|
108
|
+
|
|
109
|
+
id prop = config[@"direction"];
|
|
110
|
+
if (prop != nil) {
|
|
111
|
+
recognizer.direction = [RCTConvert NSInteger:prop];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
114
|
#if !TARGET_OS_TV
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
prop = config[@"numberOfPointers"];
|
|
116
|
+
if (prop != nil) {
|
|
117
|
+
recognizer.numberOfTouchesRequired = [RCTConvert NSInteger:prop];
|
|
118
|
+
}
|
|
119
119
|
#endif
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
|
|
123
123
|
{
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
RNGestureHandlerState savedState = _lastState;
|
|
125
|
+
BOOL shouldBegin = [super gestureRecognizerShouldBegin:gestureRecognizer];
|
|
126
|
+
_lastState = savedState;
|
|
127
|
+
|
|
128
|
+
return shouldBegin;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
- (RNGestureHandlerEventExtraData *)eventExtraData:(id)_recognizer
|
|
132
132
|
{
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
133
|
+
// For some weird reason [recognizer locationInView:recognizer.view.window] returns (0, 0).
|
|
134
|
+
// To calculate the correct absolute position, first calculate the absolute position of the
|
|
135
|
+
// view inside the root view controller (https://stackoverflow.com/a/7448573) and then
|
|
136
|
+
// add the relative touch position to it.
|
|
137
|
+
|
|
138
|
+
RNBetterSwipeGestureRecognizer *recognizer = (RNBetterSwipeGestureRecognizer *)_recognizer;
|
|
139
|
+
|
|
140
|
+
CGPoint viewAbsolutePosition =
|
|
141
|
+
[recognizer.view convertPoint:recognizer.view.bounds.origin
|
|
142
|
+
toView:[UIApplication sharedApplication].keyWindow.rootViewController.view];
|
|
143
|
+
CGPoint locationInView = [recognizer getLastLocation];
|
|
144
|
+
|
|
145
|
+
return [RNGestureHandlerEventExtraData
|
|
146
|
+
forPosition:locationInView
|
|
147
|
+
withAbsolutePosition:CGPointMake(
|
|
148
|
+
viewAbsolutePosition.x + locationInView.x, viewAbsolutePosition.y + locationInView.y)
|
|
149
|
+
withNumberOfTouches:recognizer.numberOfTouches];
|
|
147
150
|
}
|
|
148
151
|
|
|
149
152
|
@end
|
|
150
|
-
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
@property (nonatomic) CGFloat force;
|
|
12
12
|
@property (nonatomic) BOOL feedbackOnActivation;
|
|
13
13
|
|
|
14
|
-
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
|
|
14
|
+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
|
|
15
15
|
|
|
16
16
|
@end
|
|
17
17
|
|
|
@@ -25,7 +25,7 @@ static const CGFloat defaultMinForce = 0.2;
|
|
|
25
25
|
static const CGFloat defaultMaxForce = NAN;
|
|
26
26
|
static const BOOL defaultFeedbackOnActivation = NO;
|
|
27
27
|
|
|
28
|
-
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler
|
|
28
|
+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
|
|
29
29
|
{
|
|
30
30
|
if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
|
|
31
31
|
_gestureHandler = gestureHandler;
|
|
@@ -45,7 +45,7 @@ static const BOOL defaultFeedbackOnActivation = NO;
|
|
|
45
45
|
}
|
|
46
46
|
[super touchesBegan:touches withEvent:event];
|
|
47
47
|
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
_firstTouch = [touches anyObject];
|
|
50
50
|
[self handleForceWithTouches:touches];
|
|
51
51
|
self.state = UIGestureRecognizerStatePossible;
|
|
@@ -59,25 +59,27 @@ static const BOOL defaultFeedbackOnActivation = NO;
|
|
|
59
59
|
}
|
|
60
60
|
[super touchesMoved:touches withEvent:event];
|
|
61
61
|
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
[self handleForceWithTouches:touches];
|
|
64
|
-
|
|
64
|
+
|
|
65
65
|
if ([self shouldFail]) {
|
|
66
66
|
self.state = UIGestureRecognizerStateFailed;
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
if (self.state == UIGestureRecognizerStatePossible && [self shouldActivate]) {
|
|
71
71
|
[self performFeedbackIfRequired];
|
|
72
72
|
self.state = UIGestureRecognizerStateBegan;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
- (BOOL)shouldActivate
|
|
76
|
+
- (BOOL)shouldActivate
|
|
77
|
+
{
|
|
77
78
|
return (_force >= _minForce);
|
|
78
79
|
}
|
|
79
80
|
|
|
80
|
-
- (BOOL)shouldFail
|
|
81
|
+
- (BOOL)shouldFail
|
|
82
|
+
{
|
|
81
83
|
return TEST_MAX_IF_NOT_NAN(_force, _maxForce);
|
|
82
84
|
}
|
|
83
85
|
|
|
@@ -113,11 +115,13 @@ static const BOOL defaultFeedbackOnActivation = NO;
|
|
|
113
115
|
[_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
|
|
114
116
|
}
|
|
115
117
|
|
|
116
|
-
- (void)handleForceWithTouches:(NSSet<UITouch *> *)touches
|
|
118
|
+
- (void)handleForceWithTouches:(NSSet<UITouch *> *)touches
|
|
119
|
+
{
|
|
117
120
|
_force = _firstTouch.force / _firstTouch.maximumPossibleForce;
|
|
118
121
|
}
|
|
119
122
|
|
|
120
|
-
- (void)reset
|
|
123
|
+
- (void)reset
|
|
124
|
+
{
|
|
121
125
|
[_gestureHandler.pointerTracker reset];
|
|
122
126
|
[super reset];
|
|
123
127
|
_force = 0;
|
|
@@ -140,7 +144,7 @@ static const BOOL defaultFeedbackOnActivation = NO;
|
|
|
140
144
|
{
|
|
141
145
|
[super resetConfig];
|
|
142
146
|
RNForceTouchGestureRecognizer *recognizer = (RNForceTouchGestureRecognizer *)_recognizer;
|
|
143
|
-
|
|
147
|
+
|
|
144
148
|
recognizer.feedbackOnActivation = defaultFeedbackOnActivation;
|
|
145
149
|
recognizer.maxForce = defaultMaxForce;
|
|
146
150
|
recognizer.minForce = defaultMinForce;
|
|
@@ -162,12 +166,10 @@ static const BOOL defaultFeedbackOnActivation = NO;
|
|
|
162
166
|
|
|
163
167
|
- (RNGestureHandlerEventExtraData *)eventExtraData:(RNForceTouchGestureRecognizer *)recognizer
|
|
164
168
|
{
|
|
165
|
-
return [RNGestureHandlerEventExtraData
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
withNumberOfTouches:recognizer.numberOfTouches];
|
|
169
|
+
return [RNGestureHandlerEventExtraData forForce:recognizer.force
|
|
170
|
+
forPosition:[recognizer locationInView:recognizer.view]
|
|
171
|
+
withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
|
|
172
|
+
withNumberOfTouches:recognizer.numberOfTouches];
|
|
170
173
|
}
|
|
171
174
|
|
|
172
175
|
@end
|
|
173
|
-
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
uint64_t previousTime;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
|
|
22
|
+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
|
|
23
23
|
- (void)handleGesture:(UIGestureRecognizer *)recognizer;
|
|
24
|
-
- (NSUInteger)
|
|
24
|
+
- (NSUInteger)getDuration;
|
|
25
25
|
|
|
26
26
|
@end
|
|
27
27
|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
CGPoint _initPosition;
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler
|
|
33
|
+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
|
|
34
34
|
{
|
|
35
35
|
if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
|
|
36
36
|
_gestureHandler = gestureHandler;
|
|
@@ -70,10 +70,11 @@
|
|
|
70
70
|
{
|
|
71
71
|
[super touchesMoved:touches withEvent:event];
|
|
72
72
|
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
CGPoint trans = [self translationInView];
|
|
75
|
-
if ((_gestureHandler.shouldCancelWhenOutside && ![_gestureHandler containsPointInView])
|
|
76
|
-
|
|
75
|
+
if ((_gestureHandler.shouldCancelWhenOutside && ![_gestureHandler containsPointInView]) ||
|
|
76
|
+
(TEST_MAX_IF_NOT_NAN(
|
|
77
|
+
fabs(trans.y * trans.y + trans.x + trans.x), self.allowableMovement * self.allowableMovement))) {
|
|
77
78
|
self.enabled = NO;
|
|
78
79
|
self.enabled = YES;
|
|
79
80
|
}
|
|
@@ -96,26 +97,25 @@
|
|
|
96
97
|
if (self.state == UIGestureRecognizerStateFailed) {
|
|
97
98
|
[self triggerAction];
|
|
98
99
|
}
|
|
99
|
-
|
|
100
|
+
|
|
100
101
|
[_gestureHandler.pointerTracker reset];
|
|
101
|
-
|
|
102
|
+
|
|
102
103
|
[super reset];
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
- (NSUInteger)getDuration
|
|
106
107
|
{
|
|
107
108
|
static mach_timebase_info_data_t sTimebaseInfo;
|
|
108
|
-
|
|
109
|
+
|
|
109
110
|
if (sTimebaseInfo.denom == 0) {
|
|
110
111
|
mach_timebase_info(&sTimebaseInfo);
|
|
111
112
|
}
|
|
112
|
-
|
|
113
|
+
|
|
113
114
|
return (NSUInteger)(((previousTime - startTime) * sTimebaseInfo.numer / (sTimebaseInfo.denom * 1000000)));
|
|
114
115
|
}
|
|
115
116
|
|
|
116
117
|
@end
|
|
117
118
|
|
|
118
|
-
|
|
119
119
|
@implementation RNLongPressGestureHandler
|
|
120
120
|
|
|
121
121
|
- (instancetype)initWithTag:(NSNumber *)tag
|
|
@@ -130,7 +130,7 @@
|
|
|
130
130
|
{
|
|
131
131
|
[super resetConfig];
|
|
132
132
|
UILongPressGestureRecognizer *recognizer = (UILongPressGestureRecognizer *)_recognizer;
|
|
133
|
-
|
|
133
|
+
|
|
134
134
|
recognizer.minimumPressDuration = 0.5;
|
|
135
135
|
recognizer.allowableMovement = 10;
|
|
136
136
|
}
|
|
@@ -139,12 +139,12 @@
|
|
|
139
139
|
{
|
|
140
140
|
[super configure:config];
|
|
141
141
|
UILongPressGestureRecognizer *recognizer = (UILongPressGestureRecognizer *)_recognizer;
|
|
142
|
-
|
|
142
|
+
|
|
143
143
|
id prop = config[@"minDurationMs"];
|
|
144
144
|
if (prop != nil) {
|
|
145
145
|
recognizer.minimumPressDuration = [RCTConvert CGFloat:prop] / 1000.0;
|
|
146
146
|
}
|
|
147
|
-
|
|
147
|
+
|
|
148
148
|
prop = config[@"maxDist"];
|
|
149
149
|
if (prop != nil) {
|
|
150
150
|
recognizer.allowableMovement = [RCTConvert CGFloat:prop];
|
|
@@ -165,21 +165,19 @@
|
|
|
165
165
|
|
|
166
166
|
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
|
|
167
167
|
{
|
|
168
|
-
//same as TapGH, this needs to be unified when all handlers are updated
|
|
168
|
+
// same as TapGH, this needs to be unified when all handlers are updated
|
|
169
169
|
RNGestureHandlerState savedState = _lastState;
|
|
170
170
|
BOOL shouldBegin = [super gestureRecognizerShouldBegin:gestureRecognizer];
|
|
171
171
|
_lastState = savedState;
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
return shouldBegin;
|
|
174
174
|
}
|
|
175
175
|
|
|
176
176
|
- (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer
|
|
177
177
|
{
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
withDuration:[(RNBetterLongPressGestureRecognizer*)recognizer getDuration]];
|
|
178
|
+
return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
|
|
179
|
+
withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
|
|
180
|
+
withNumberOfTouches:recognizer.numberOfTouches
|
|
181
|
+
withDuration:[(RNBetterLongPressGestureRecognizer *)recognizer getDuration]];
|
|
183
182
|
}
|
|
184
183
|
@end
|
|
185
|
-
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
@interface RNManualRecognizer : UIGestureRecognizer
|
|
4
4
|
|
|
5
|
-
- (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler;
|
|
5
|
+
- (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
|
|
6
6
|
|
|
7
7
|
@end
|
|
8
8
|
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
{
|
|
25
25
|
[super touchesBegan:touches withEvent:event];
|
|
26
26
|
[_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
if (_shouldSendBeginEvent) {
|
|
29
29
|
[_gestureHandler handleGesture:self];
|
|
30
30
|
_shouldSendBeginEvent = NO;
|
|
@@ -35,6 +35,13 @@
|
|
|
35
35
|
{
|
|
36
36
|
[super touchesMoved:touches withEvent:event];
|
|
37
37
|
[_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
|
|
38
|
+
|
|
39
|
+
if ([self shouldFail]) {
|
|
40
|
+
self.state = (self.state == UIGestureRecognizerStatePossible) ? UIGestureRecognizerStateFailed
|
|
41
|
+
: UIGestureRecognizerStateCancelled;
|
|
42
|
+
|
|
43
|
+
[self reset];
|
|
44
|
+
}
|
|
38
45
|
}
|
|
39
46
|
|
|
40
47
|
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
|
|
@@ -53,21 +60,29 @@
|
|
|
53
60
|
{
|
|
54
61
|
[_gestureHandler.pointerTracker reset];
|
|
55
62
|
[super reset];
|
|
56
|
-
|
|
63
|
+
|
|
57
64
|
_shouldSendBeginEvent = YES;
|
|
58
65
|
}
|
|
59
66
|
|
|
67
|
+
- (BOOL)shouldFail
|
|
68
|
+
{
|
|
69
|
+
if (_gestureHandler.shouldCancelWhenOutside && ![_gestureHandler containsPointInView]) {
|
|
70
|
+
return YES;
|
|
71
|
+
} else {
|
|
72
|
+
return NO;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
60
76
|
@end
|
|
61
77
|
|
|
62
78
|
@implementation RNManualGestureHandler
|
|
63
79
|
|
|
64
80
|
- (instancetype)initWithTag:(NSNumber *)tag
|
|
65
81
|
{
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
return self;
|
|
82
|
+
if ((self = [super initWithTag:tag])) {
|
|
83
|
+
_recognizer = [[RNManualRecognizer alloc] initWithGestureHandler:self];
|
|
84
|
+
}
|
|
85
|
+
return self;
|
|
71
86
|
}
|
|
72
87
|
|
|
73
88
|
@end
|