Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 36

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ сравниваСм ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΎΡ‚ повСдСния столкновСния, с константой kBottomBoundary, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ присвоили Π±Π°Ρ€ΡŒΠ΅Ρ€Ρƒ ΠΏΡ€ΠΈ создании этого Π±Π°Ρ€ΡŒΠ΅Ρ€Π°. Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚Π°ΠΊΡƒΡŽ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ: ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΏΠΎΠ΄ дСйствиСм тяготСния двиТСтся ΠΏΠΎ экрану Π²Π½ΠΈΠ·, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ установлСнной Π½Π°ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Π“Ρ€Π°Π½ΠΈΡ†Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ остановится Π½Π° расстоянии 100 Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края экрана, Π½Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ.

Одним ΠΈΠ· самых интСрСсных свойств класса UIGravityBehavior являСтся collisionMode. Π­Ρ‚ΠΎ свойство описываСт, ΠΊΠ°ΠΊ столкновСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Π΅. НапримСр, Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ рассмотрСли Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ столкновСниС, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π² Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ Π±Π΅Π· измСнСния значСния collisionMode. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ рСгистрируСт столкновСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ°ΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Π² ΠΎΠΏΠΎΡ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Однако ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ упомянутого свойства. Π’ΠΎΡ‚ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ для Π½Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ:

β€’ UICollisionBehaviorModeItems β€” ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ столкновСния ΠΌΠ΅ΠΆΠ΄Ρƒ динамичСскими элСмСнтами β€” Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠ΅ΠΆΠ΄Ρƒ двиТущимися ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ°ΠΌΠΈ;

β€’ UICollisionBehaviorModeBoundaries β€” ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ столкновСния ΠΌΠ΅ΠΆΠ΄Ρƒ динамичСскими элСмСнтами ΠΈ установлСнными Π½Π°ΠΌΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ, располоТСнными Π² ΠΎΠΏΠΎΡ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅;

β€’ UICollisionBehaviorModeEverything β€” ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π»ΡŽΠ±Ρ‹Π΅ столкновСния, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π½ΠΈΡ… сами элСмСнты, элСмСнты ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π΅Ρ‰Π΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ свойства задаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

МоТно ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рассмотрСнныС Ρ€Π°Π½Π΅Π΅ значСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π˜Π›Π˜ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сочСтания Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² столкновСния, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ поставлСнным ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ бизнСс-трСбованиям.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ со значСниями свойства collisionMode ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ для этого свойства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ UICollisionBehaviorModeBoundaries, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΎΠ±Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΈΠΊΠ° ΡƒΠΏΠ°Π΄ΡƒΡ‚ Π² ниТнюю Ρ‡Π°ΡΡ‚ΡŒ экрана, окаТутся Π½Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅, Π½ΠΎ Π½Π΅ столкнутся, Π° вдвинутся Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ просто ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ столкновСниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 2.1.

2.3. АнимированиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ВрСбуСтся Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Ρ‹ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π½Π° экранС Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

РСшСниС

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ повСдСния Ρ‚ΠΈΠΏΠ° UIPushBehavior с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ относящСгося ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° initWithItems: mode: ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π΅ΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ UIPushBehaviorModeContinuous. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Ρ‚ΠΎΠ»ΠΊΠ°Ρ‚ΡŒ элСмСнты ΠΏΠΎΠ΄ ΡƒΠ³Π»ΠΎΠΌ, Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ для Ρ‚ΠΎΠ»Ρ‡ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ setAngle:. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π΄Π°Π΅Ρ‚ ΡƒΠ³ΠΎΠ» (Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…) для Π΄Π°Π½Π½ΠΎΠ³ΠΎ повСдСния. Π—Π°Ρ‚Π΅ΠΌ потрСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠ°Π³Π½ΠΈΡ‚ΡƒΠ΄Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ силу Ρ‚ΠΎΠ»Ρ‡ΠΊΠ°. Π­Ρ‚Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° задаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ относящСгося ΠΊ Ρ‚ΠΎΠ»Ρ‡ΠΊΡƒ повСдСния setMagnitude:. ΠœΠ°Π³Π½ΠΈΡ‚ΡƒΠ΄Π° рассчитываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΌΠ°Π³Π½ΠΈΡ‚ΡƒΠ΄Π° Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ 1 Ρ‚ΠΎΡ‡ΠΊΠ° соотвСтствуСт ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ 100 Ρ‚ΠΎΡ‡Π΅ΠΊ/с2, ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΌΡƒ ΠΊ Ρ†Π΅Π»Π΅Π²Ρ‹ΠΌ Π²ΠΈΠ΄Π°ΠΌ.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’ΠΎΠ»Ρ‡ΠΊΠΈ, ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΡ‹Π΅ ΠΊ экранным элСмСнтам, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ β€” особСнно Ρ‚ΠΎΠ»Ρ‡ΠΊΠΈ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. Допустим, Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-Ρ„ΠΎΡ‚ΠΎΠ°Π»ΡŒΠ±ΠΎΠΌ для iPad. Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части экрана создали Ρ‚Ρ€ΠΈ слайда, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… соотвСтствуСт страницС альбома, созданной ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’ Π½ΠΈΠΆΠ½Π΅ΠΉ части экрана Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° страницах. Один ΠΈΠ· способов, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠΏΠΎΡ€Π½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ рСгистратора ТСстов касания (tap gesture recognizer), созданиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ рассмотрСно Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 10.5. Π­Ρ‚ΠΎΡ‚ рСгистратор обСспСчиваСт отслСТиваниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ТСстов касания ΠΈ позволяСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ изобраТСния Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ слайд. ΠŸΡ€ΠΎΡ†Π΅ΡΡ выглядит ΠΊΠ°ΠΊ пСрСтаскиваниС. Π”Ρ€ΡƒΠ³ΠΎΠΉ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ β€” использованиС Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²ΠΎΠ³ΠΎ повСдСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Apple Π²ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ Π² UIKit.

Π’ΠΎΠ»Ρ‡ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ относится ΠΊ Ρ‚ΠΈΠΏΡƒ UIPushBehavior ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΌΠ°Π³Π½ΠΈΡ‚ΡƒΠ΄ΠΎΠΉ ΠΈ ΡƒΠ³Π»ΠΎΠΌ. Π£Π³ΠΎΠ» измСряСтся Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…, Π° ΠΌΠ°Π³Π½ΠΈΡ‚ΡƒΠ΄Π° Π² 1 Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ двиТСния, Ρ€Π°Π²Π½ΠΎΠΌΡƒ 100 Ρ‚ΠΎΡ‡Π΅ΠΊ/с2. Π’ΠΎΠ»Ρ‡ΠΊΠΎΠ²Ρ‹Π΅ повСдСния ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅: сначала ΠΈΡ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ Ρ‚ΠΈΠΏΠ° UIDynamicAnimator.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ собираСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²ΠΈΠ΄ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. ΠœΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСний, благодаря Ρ‡Π΅ΠΌΡƒ малСнький Π²ΠΈΠ΄ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π»Π΅Ρ‚Π°Ρ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ большого Π²ΠΈΠ΄Π° (с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ). О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со столкновСниями, ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 2.2. Π—Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ рСгистратор ТСстов касания (см. Ρ€Π°Π·Π΄Π΅Π» 10.5) ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Π²ΠΈΠ΄Π°. Π­Ρ‚ΠΎΡ‚ рСгистратор Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡ‚ΡŒ нас ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ТСстС касания, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π΄ΡˆΠ΅ΠΌ Π½Π° экранС.

Когда касаниС Π±ΡƒΠ΄Π΅Ρ‚ зарСгистрировано, рассчитаСм ΡƒΠ³ΠΎΠ» ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ касания ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ малСнького ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Π’Π°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡƒΠ³ΠΎΠ», Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹ΠΉ Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ смоТСм Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ этот ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄. Π—Π°Ρ‚Π΅ΠΌ рассчитаСм расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ касания ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ малСнького Π²ΠΈΠ΄Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² качСствС ΠΌΠ°Π³Π½ΠΈΡ‚ΡƒΠ΄Ρ‹ Ρ‚ΠΎΠ»Ρ‡ΠΊΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ°Π³Π½ΠΈΡ‚ΡƒΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π΅ΠΌ большС, Ρ‡Π΅ΠΌ дальшС ΠΎΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° находится Ρ‚ΠΎΡ‡ΠΊΠ° касания.

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ основы Ρ‚Ρ€ΠΈΠ³ΠΎΠ½ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ. Но Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ с Π½ΠΈΠΌΠΈ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ β€” Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ лишь Ρ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠΎΠ΄Π° ΠΊ этому Ρ€Π°Π·Π΄Π΅Π»Ρƒ. На рис. 2.2 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ вычисляСтся ΡƒΠ³ΠΎΠ» ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ. Π˜Ρ‚Π°ΠΊ, я надСюсь, Ρ‡Ρ‚ΠΎ объяснСниС получится достаточно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнноС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.


Рис. 2.2. РасчСт ΡƒΠ³Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ


Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ с опрСдСлСния всСх Π²Π°ΠΆΠ½Ρ‹Ρ… свойств нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°:


#import Β«ViewController.hΒ»


@interface ViewController ()

@property (nonatomic, strong) UIView *squareView;

@property (nonatomic, strong) UIDynamicAnimator *animator;

@property (nonatomic, strong) UIPushBehavior *pushBehavior;

@end

@implementation ViewController


<# ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ваш ΠΊΠΎΠ΄ находится здСсь #>

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСния ΠΈ Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’ΠΎΠ»Ρ‡ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ добавляСтся ΠΊ классу Π² качСствС свойства, Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСний β€” просто ΠΊΠ°ΠΊ локальная пСрСмСнная. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСния, ΠΈΠΌΠ΅Π½Π½ΠΎ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ всС столкновСния с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΈ Π½Π°ΠΌ большС Π½Π΅ придСтся ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСний. Однако Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ касаний придСтся ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ это Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ графичСский элСмСнт подталкивался ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ касания. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π°ΠΌ трСбуСтся связь касания с Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Π½Π΅ трСбуСтся такая связь со столкновСниями.

Π”Π°Π»Π΅Π΅ напишСм ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ малСнький ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π΅Π³ΠΎ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ большого Π²ΠΈΠ΄Π° с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ:


β€” (void) createSmallSquareView{

self.squareView =

[[UIView alloc] initWithFrame:

CGRectMake(0.0f, 0.0f, 80.0f, 80.0f)];

self.squareView.backgroundColor = [UIColor greenColor];


self.squareView.center = self.view.center;


[self.view addSubview: self.squareView];

}

Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ рСгистратор ТСстов касания, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ прикосновСния ΠΊ Π²ΠΈΠ΄Ρƒ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ:

β€” (void) createGestureRecognizer{

UITapGestureRecognizer *tapGestureRecognizer =

[[UITapGestureRecognizer alloc] initWithTarget: self

action:@selector(handleTap:)];

[self.view addGestureRecognizer: tapGestureRecognizer];

}

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π·Π° нас всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. ПозТС, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ отобразится Π½Π° экранС, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

И Π½Π΅ Π·Π°Π±ΡƒΠ΄Π΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСния ΠΈ Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:


β€” (void) createAnimatorAndBehaviors{

self.animator = [[UIDynamicAnimator alloc]

initWithReferenceView: self.view];


/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ столкновСний */

UICollisionBehavior *collision = [[UICollisionBehavior alloc]

initWithItems:@[self.squareView]];

collision.translatesReferenceBoundsIntoBoundary = YES;


self.pushBehavior = [[UIPushBehavior alloc]

initWithItems:@[self.squareView]

mode: UIPushBehaviorModeContinuous];


[self.animator addBehavior: collision];

[self.animator addBehavior: self.pushBehavior];

}


ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ столкновСний рассказано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 2.2. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ всС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°ΠΌ понадобится Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ появится Π½Π° экранС:


β€” (void)viewDidAppear:(BOOL)animated{

[super viewDidAppear: animated];