/* ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°Π»ΡΡΠ΅Π², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. */
self.longPressGestureRecognizer.numberOfTouchesRequired = 2;
/* ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° 100 ΡΠΎΡΠ΅ΠΊ,
ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΆΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½. */
self.longPressGestureRecognizer.allowableMovement = 100.0f;
/* ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠΆΠ°ΡΡ ΠΊ ΡΠΊΡΠ°Π½Ρ Π΄Π²Π° ΠΏΠ°Π»ΡΡΠ°
(numberOfTouchesRequired) ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π° ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΡΠΎΠ±Ρ ΠΆΠ΅ΡΡ
Π±ΡΠ» ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½. */
self.longPressGestureRecognizer.minimumPressDuration = 1.0;
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΡΠΎΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² ΠΊ Π²ΠΈΠ΄Ρ. */
[self.view addGestureRecognizer: self.longPressGestureRecognizer];
}
ΠΡΠ»ΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»Π³ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΡ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ, Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ΡΡ ΠΈ Π² ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π·Π²ΠΎΠ½ΠΎΠΊ Π»ΠΈΠ±ΠΎ Π½Π°ΡΡΡΠΏΠ°Π΅Ρ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΈΠ½ΠΎΠ΅ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅, ΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ UIGestureRecognizerStateCancelled. ΠΠ±ΡΠ΅ΠΊΡΡ-ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ½ΠΎΠ²Π° Π½Π΅ ΡΠΎΠ²Π΅ΡΡΠΈΡ Π²ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ , ΡΡΠΎΠ±Ρ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ Ρ ΠΎΡΡ Π±Ρ Π΄Π²ΡΡ ΠΏΠ°Π»ΡΡΠ΅Π² Π½Π° Π²ΠΈΠ΄Π΅ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ Π²ΠΈΠ΄Π°, ΠΈ Π½Π°ΠΆΠ°ΡΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π»ΠΈΡΡΡΡ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ.
ΠΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ Π²ΠΈΠ΄Π° ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ longPressGestureRecognizer ΡΠΈΠΏΠ° UILongPressGestureRecognizer. ΠΡΠΎΡ Π°ΡΠΏΠ΅ΠΊΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π² ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅ Β«Π Π΅ΡΠ΅Π½ΠΈΠ΅Β» Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π ΡΠΎΡΡΠ°Π²Π΅ iOS SDK Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ Π΄ΠΎΠ»Π³ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ UILongTapGestureRecognizer. ΠΠ΅ΡΡ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠ°Π»ΡΡΠ°ΠΌΠΈ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°Π»ΡΡΠ΅Π² Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°Π΄Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ) Π²ΠΈΠ΄ UIView ΠΈ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ°Π»Π΅Ρ (ΠΈΠ»ΠΈ ΠΏΠ°Π»ΡΡΡ) Π² ΡΡΠΎΠΉ ΡΠΎΡΠΊΠ΅ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΅ΠΊΡΠ½Π΄. Π£ΡΠΈΡΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ Π΄ΠΎΠ»Π³ΠΈΠ΅ Π½Π°ΠΆΠ°ΡΠΈΡ β ΡΡΠΎ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ.
ΠΠ° ΡΠ°Π±ΠΎΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² Π΄ΠΎΠ»Π³ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ Π²Π»ΠΈΡΡΡ ΡΠ΅ΡΡΡΠ΅ Π²Π°ΠΆΠ½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°:
β’ numberOfTapsRequired β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠΉ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π½ ΠΆΠ΅ΡΡ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ. ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ Π½Π°ΠΆΠ°ΡΡ β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠΊΠΎΡΠ½ΡΡΡΡΡ ΠΏΠ°Π»ΡΡΠ΅ΠΌ ΠΊ ΡΠΊΡΠ°Π½Ρ. ΠΠ°ΠΆΠ°ΡΠΈΠ΅ β ΡΡΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠ°Π»Π΅Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠΆΠΈΠΌΠ°Π΅ΡΡΡ ΠΊ ΡΠΊΡΠ°Π½Ρ, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΡΠ²Π°Π΅ΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0;
β’ numberOfTouchesRequired β Π² ΡΡΠΎΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°Π»ΡΡΠ΅Π², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΠ½Π΅ΡΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΠΆΠ΅ΡΡΠ°. ΠΡΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ numberOfTapsRequired ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ 0, ΡΠΎ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°Π»ΡΡΠ΅Π²;
β’ allowableMovement β ΡΡΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡ ΠΏΠ°Π»Π΅Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ ΠΆΠ΅ΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΎ;
β’ minimumPressDuration β Π΄Π°Π½Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ (Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ ) ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠΆΠΈΠΌΠ°ΡΡ ΠΏΠ°Π»ΡΡΡ ΠΊ ΡΠΊΡΠ°Π½Ρ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ ΠΆΠ΅ΡΡ.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² Π·Π°Π΄Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
β’ numberOfTapsRequired β Default (ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΠΌ);
β’ numberOfTouchesRequired β 2;
β’ allowableMovement β 100;
β’ minimumPressDuration β 1.
ΠΡΠΈ ΡΠ°ΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΠΆΠ΅ΡΡ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½, ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΌΠ΅Ρ ΡΠΊΡΠ°Π½ Π΄Π²ΡΠΌΡ ΠΏΠ°Π»ΡΡΠ°ΠΌΠΈ ΠΈ Π·Π°Π΄Π΅ΡΠΆΠΈΡ ΠΏΠ°Π»ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ (minimumPressDuration), ΠΏΡΠΈΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΏΠ°Π»ΡΡΡ ΠΎΡ ΠΌΠ΅ΡΡΠ° ΠΊΠ°ΡΠ°Π½ΠΈΡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° 100 ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² (allowableMovement).
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΆΠ΅ΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½, ΠΎΠ½ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ handleLongPressGestures:, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
β (void) handleLongPressGestures:
(UILongPressGestureRecognizer *)paramSender{
/* ΠΠ΄Π΅ΡΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π½Π°ΠΉΡΠΈ ΡΡΠ΅Π΄Π½ΡΡ ΡΠΎΡΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΏΠ°Π»ΡΡΠ°ΠΌΠΈ,
ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π²ΡΠΈΠΌΠΈ ΠΆΠ΅ΡΡ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ.
ΠΡ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ
numberOfTouchesRequired ΠΊΠ»Π°ΡΡΠ° UILongPressGestureRecognizer,
ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° viewDidLoad Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°
Π²ΠΈΠ΄Π°. ΠΡΠ»ΠΈ Π²ΡΡΡΠ½ΠΈΡΡΡ, ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»Π³ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ, ΠΌΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ. */
if (paramSender.numberOfTouchesRequired == 2){
CGPoint touchPoint1 =
[paramSender locationOfTouch:0
inView: paramSender.view];
CGPoint touchPoint2 =
[paramSender locationOfTouch:1
inView: paramSender.view];
CGFloat midPointX = (touchPoint1.x + touchPoint2.x) / 2.0f;
CGFloat midPointY = (touchPoint1.y + touchPoint2.y) / 2.0f;
CGPoint midPoint = CGPointMake(midPointX, midPointY);
self.dummyButton.center = midPoint;
} else {
/* ΠΡΠΎ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»Π³ΠΈΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡΡΡ
Π±ΠΎΠ»Π΅Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ Π΄Π²ΡΠΌΡ ΠΏΠ°Π»ΡΡΠ°ΠΌΠΈ. */
}
}
}
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ iOS, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄ΠΎΠ»Π³ΠΈΠ΅ Π½Π°ΠΆΠ°ΡΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Maps (ΠΠ°ΡΡΡ). ΠΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ΅ΡΡΠ°, Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΏΠ°Π»ΡΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΎΡΠΊΡ Π½Π° ΠΊΠ°ΡΡΠ΅ ΠΈ Π½Π΅Π½Π°Π΄ΠΎΠ»Π³ΠΎ Π·Π°Π΄Π΅ΡΠΆΠΈΡΠ΅ ΠΏΠ°Π»Π΅Ρ. Π ΡΡΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΌΠ°ΡΠΊΠ΅Ρ.
10.5. ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΆΠ΅ΡΡΠΎΠ²-Π½Π°ΠΆΠ°ΡΠΈΠΉ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ ΡΠΊΡΠ°Π½Π½ΡΠΉ Π²ΠΈΠ΄ Π² ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡΠΎΡΠΊΠ΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° UITapGestureRecognizer ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΅Π³ΠΎ ΠΊ ΡΠ΅Π»Π΅Π²ΠΎΠΌΡ Π²ΠΈΠ΄Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° addGestureRecognizer:, ΠΎΡΠ½ΠΎΡΡΡΠ΅Π³ΠΎΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ UIView. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²ΠΈΠ΄Π° (.h-ΡΠ°ΠΉΠ»):
#import Β«ViewController.hΒ»
@interface ViewController ()
@property (nonatomic, strong)
UITapGestureRecognizer *tapGestureRecognizer;
@end
@implementation ViewController
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° viewDidLoad ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²ΠΈΠ΄Π° ΡΠ°ΠΊΠΎΠ²Π°:
β (void)viewDidLoad {
[super viewDidLoad];
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ²-Π½Π°ΠΆΠ°ΡΠΈΠΉ. */
self.tapGestureRecognizer = [[UITapGestureRecognizer alloc]
initWithTarget: self
action:@selector(handleTaps:)];
/* ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°Π»ΡΡΠ΅Π², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅. */
self.tapGestureRecognizer.numberOfTouchesRequired = 2;
/* ΠΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°ΡΠ°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅
ΡΠ΅ΠΌ ΠΆΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½. */
self.tapGestureRecognizer.numberOfTapsRequired = 3;
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ Π²ΠΈΠ΄Ρ ΡΡΠΎΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ². */
[self.view addGestureRecognizer: self.tapGestureRecognizer];
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ²-Π½Π°ΠΆΠ°ΡΠΈΠΉ Π»ΡΡΡΠ΅ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΡ Π½Π°ΠΆΠ°ΡΠΈΠΉ (ΡΠΎΠ»ΡΠΊΠΎΠ²) Π½Π° ΡΠΊΡΠ°Π½. ΠΠ°ΠΆΠ°ΡΠΈΠ΅ β ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΏΠ°Π»ΡΡΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠΎΡΠΊΠΈ ΡΠΊΡΠ°Π½Π°, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΡΠ²Π°Π΅Ρ ΠΏΠ°Π»Π΅Ρ ΠΎΡ Π½Π΅Π³ΠΎ. ΠΠ΅ΡΡ Π½Π°ΠΆΠ°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΡΠΌ.
ΠΠ΅ΡΠΎΠ΄ locationInView: ΠΊΠ»Π°ΡΡΠ° UITapGestureRecognizer ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΎΡΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π°ΠΆΠ°ΡΠΈΡ. ΠΡΠ»ΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π½Π°ΠΆΠ°ΡΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π½ΠΈΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ locationOfTouch: inView: ΠΊΠ»Π°ΡΡΠ° UITapGestureRecognizer, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠ°ΡΠ°Π½ΠΈΠΉ. Π ΠΊΠΎΠ΄Π΅ ΠΌΡ Π·Π°Π΄Π°Π»ΠΈ Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° numberOfTouchesRequired ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ²-Π½Π°ΠΆΠ°ΡΠΈΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 2. ΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π΄Π²Π° ΠΏΠ°Π»ΡΡΠ°. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠΉ, ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅, ΡΡΠΎΠ±Ρ ΠΆΠ΅ΡΡΡ-Π½Π°ΠΆΠ°ΡΠΈΡ ΡΡΠ°Π»ΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ 3. Π― ΡΠ΄Π΅Π»Π°Π» ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° numberOfTapsRequired. Π― ΡΠΊΠ°Π·Π°Π» ΠΌΠ΅ΡΠΎΠ΄ handleTaps: Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ²-Π½Π°ΠΆΠ°ΡΠΈΠΉ:
β (void) handleTaps:(UITapGestureRecognizer*)paramSender{
NSUInteger touchCounter = 0;
for (touchCounter = 0;
touchCounter < paramSender.numberOfTouchesRequired;
touchCounter++){
CGPoint touchPoint =
[paramSender locationOfTouch: touchCounter
inView: paramSender.view];
NSLog(@"Touch #%lu: %@",
(unsigned long)touchCounter+1,
NSStringFromCGPoint(touchPoint));
}
}
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ Π΄ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ, ΠΏΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π°ΠΆΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ ΠΆΠ΅ΡΡΠΎΠ²-Π½Π°ΠΆΠ°ΡΠΈΠΉ Π½Π°ΡΠ°Π» ΡΠ°Π±ΠΎΡΡ. ΠΠ΅ΡΡ Π·Π° ΠΎΡΠ½ΠΎΠ²Ρ ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ, ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ ΡΠΎΡΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π»ΠΈ Π²Ρ Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΈΠ»ΠΈ Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ, Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
Touch #1: {107, 186}
Touch #2: {213, 254}
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π²Π° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π°ΠΆΠ°ΡΠΈΡ, ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΠΊΠ»Π°Π²ΠΈΡΡ Option ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΌΡΡΠΈ ΠΏΠΎ ΡΠΊΡΠ°Π½Ρ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ°. ΠΠ° ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΠ²ΡΡΡΡ Π΄Π²Π΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΊΠ°ΡΠ°Π½ΠΈΡ.