Π― Π±Ρ Ρ
ΠΎΡΠ΅Π», ΡΡΠΎΠ±Ρ ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π΄Π²ΠΈΠ³Π°Π»ΡΡ ΠΏΠΎ ΠΎΡΠΈ X ΠΈΠ»ΠΈ Y, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
PanGestureHandler (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΎΠ΄ΠΈΠ½, Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½):
<PanGestureHandler
onHandlerStateChange={onGestureEventY}
onGestureEvent={onGestureEventY}
>
<Animated.View style={{ flex: 1 }}>
<PanGestureHandler
onHandlerStateChange={onGestureEventX}
onGestureEvent={onGestureEventX}
>
// ....
</PanGestureHandler>
</Animated.View>
</PanGestureHandler>
);
Π― Ρ
ΠΎΡΠ΅Π» Π±Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎ X, ΡΡΠΎΠ±Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Y ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
Π― ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π» ΡΡΡ ΡΠ°ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ: https://kmagiera.github.io/react-native-gesture-handler/docs/interactions.html, Π½ΠΎ, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΠΈΡΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅ΠΏΡΠ°?
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Ρ Π½Π°ΡΠ΅Π» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ΅ <PanGestureHandlers>
Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² <Animated.View>
. ΠΠ°ΡΠ΅ΠΌ Ρ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠ°Π½ΠΎΡΠ°ΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π» ΠΆΠ΅ΡΡ. Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ Π½ΠΈΠΆΠ΅.
<PanGestureHandler
onHandlerStateChange={onGestureEventX}
onGestureEvent={onGestureEventX}
ref={this.horizontalHandler}
minDist={10}
failOffsetY={[-10, 10]}
>
<Animated.View style={{ flex: 1 }}>
<PanGestureHandler
waitFor={this.horizontalHandler}
onHandlerStateChange={onGestureEventY}
onGestureEvent={onGestureEventY}
>
<Animated.View style={{ flex: 1 }}>
//...
</Animated.View>
</PanGestureHandler>
</Animated.View>
</PanGestureHandler>
@wcandillon Π²Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠΈΠ»ΠΈ?
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΡΠ° Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΡΠΎΡΠΎ: https://github.com/wcandillon/can-it-be-done-in-react-native/blob/f605d034d414a70884eff95414072030f5598410/flutter-animations/components/Sections.js
ΠΡΠ°ΠΊ, ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ΅ΡΠΏΠΎΠ½Π΄Π΅Π½ΡΠΎΠ² Pan Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π» Π΄Π»Ρ ΠΌΠ΅Π½Ρ. ΠΡΠΎ Π±ΡΠ»ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π³Π»ΡΡΠ½ΠΎ. ΠΡΠΎ ΡΠΎ, ΡΡΠΎ Ρ ΡΠ΄Π΅Π»Π°Π» Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ. Π― Π²Π·ΡΠ» ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ translateDirection, ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π» Π΅Π΅ Π±Π΅Π· Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ -1. Π ΠΊΠΎΠ³Π΄Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ, Π²ΡΡΠΈΡΠ»ΡΠ»ΠΎΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π²ΠΈΠ΄, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ translation.y ΠΈ translation.x. ΠΠ°ΡΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ, Ρ ΠΌΠ΅Π½ΡΡ ΡΠΎΠ»ΡΠΊΠΎ translateX ΠΈΠ»ΠΈ translateY Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
`cond (eq (state, State.ACTIVE), [
cond(
eq(translateDirection, -1),
cond(
greaterThan(translation.y, translation.x),
set(translateDirection, 2),
set(translateDirection, 1)
)
),
cond(
neq(translateDirection, -1),
cond(
eq(translateDirection, 1),
set(translateX, add(offsetX, translation.x)),
set(translateY, translation.y)
)
),
]),`
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Ρ Π½Π°ΡΠ΅Π» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ΅
<PanGestureHandlers>
Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π²<Animated.View>
. ΠΠ°ΡΠ΅ΠΌ Ρ ΠΌΠΎΠ³Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠ°Π½ΠΎΡΠ°ΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π» ΠΆΠ΅ΡΡ. Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ Π½ΠΈΠΆΠ΅.