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

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

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

β€’ UICollisionBehavior β€” обСспСчиваСт ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ столкновСний;

β€’ UIGravityBehavior β€” ΠΊΠ°ΠΊ понятно ΠΈΠ· названия, обСспСчиваСт ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΡŽ тяготСния;

β€’ UIPushBehavior β€” позволяСт ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Π°ΡˆΠΈΡ… Π²ΠΈΠ΄Π°Ρ… Ρ‚ΠΎΠ»Ρ‡ΠΊΠΈ. Допустим, Π²Ρ‹ Π΄ΠΎΡ‚Ρ€ΠΎΠ½ΡƒΠ»ΠΈΡΡŒ ΠΏΠ°Π»ΡŒΡ†Π΅ΠΌ Π΄ΠΎ экрана, Π° ΠΏΠΎΡ‚ΠΎΠΌ стали постСпСнно Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ ΠΏΠ°Π»Π΅Ρ† ΠΊ Π΅Π³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ ΠΊΡ€Π°ΡŽ. Если ΠΊ Π²ΠΈΠ΄Ρƒ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ°, оснащСнная Ρ‚ΠΎΠ»Ρ‡ΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ‚ΠΎΠ»ΠΊΠ°Ρ‚ΡŒ эту ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΏΠ°Π»ΡŒΡ†Π΅ΠΌ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½Π° Π»Π΅ΠΆΠ°Π»Π° Π½Π° столС;

β€’ UISnapBehavior β€” обСспСчиваСт ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΎΠ² ΠΊ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ мСстам Π½Π° экранС.


Как Π±Ρ‹Π»ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π°Π½Π΅Π΅, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ динамичСского повСдСния потрСбуСтся Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° UIDynamicAnimator. Аниматор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ с ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ, которая Π² Apple называСтся ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΌ Π²ΠΈΠ΄ΠΎΠΌ. Аниматор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСму ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° для расчСта Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΉ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π²ΠΈΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π° Π² качСствС ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ для динамичСского Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Π°. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСния ΠΈ Ρ‚Π΅ΠΌ самым Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ добавляСмыС элСмСнты Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ смоТСтС Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΠΏΠΎΡ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ всС элСмСнты ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Π΄Π°ΠΆΠ΅ Ссли Π½Π° Π½ΠΈΡ… дСйствуСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ тяготСния.

ΠžΠΏΠΎΡ€Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π² качСствС контСкста для Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ управляСт Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€. НапримСр, Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, столкнутся Π»ΠΈ Π΄Π²Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Для этого ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Core Graphics, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π±ΡƒΠ΄ΡƒΡ‚ Π»ΠΈ Π΄Π²Π° этих ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° Π² контСкстС ΠΈΡ… Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π° β€” Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°.

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

2.1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ тяготСния ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса

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

НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ вашСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса двигались Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π½Π° Π½ΠΈΡ… дСйствуСт сила тяТСсти: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ элСмСнт ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ ΠΊΡ€Π°ΡŽ экрана, Ρ‚ΠΎ ΠΏΠΎΠ΄ дСйствиСм силы тяТСсти ΠΎΠ½ ΡƒΠΏΠ°Π΄Π΅Ρ‚ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΊΡ€Π°ΡŽ. ОбъСдинив эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ столкновСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ со своСго Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ мСстополоТСния, ΠΏΠΎΠΊΠ° Π½Π΅ столкнутся с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²Π°ΠΌΠΈ Π»ΠΈΠ½ΠΈΠ΅ΠΉ.

РСшСниС

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° UIGravityBehavior ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ Π½Π΅ΠΌΡƒ Ρ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ тяготСниС ΠΊ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π‘Π΄Π΅Π»Π°Π² это, создайтС экзСмпляр UIDynamicAnimator, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ тяготСния, Π° всю ΠΎΡΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ сдСлаСт Π·Π° вас.

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

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ создадим простой Π²ΠΈΠ΄, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Ρ€Π°ΡΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, находящийся Π² ΠΎΠ΄Π½ΠΎΠ²ΠΈΠ΄ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ ΠΌΡ‹ помСстим Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана. Π—Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ тяготСния ΠΈ посмотрим, ΠΊΠ°ΠΊ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π²Π½ΠΈΠ·, ΠΏΠΎΠΊΠ° Π½Π΅ скроСтся Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ экрана.

Π˜Ρ‚Π°ΠΊ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ ΠΈ Π²ΠΈΠ΄:


#import Β«ViewController.hΒ»


@interface ViewController ()

@property (nonatomic, strong) UIView *squareView;

@property (nonatomic, strong) UIDynamicAnimator *animator;

@end


@implementation ViewController


<# ΠžΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° вашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π° находится здСсь #>


Π”Π°Π»Π΅Π΅ создадим нСбольшой Π²ΠΈΠ΄, присвоим Π΅ΠΌΡƒ Ρ†Π²Π΅Ρ‚ ΠΈ помСстим Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π²ΠΈΠ΄Π° нашСго ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. Π’Π°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ экзСмпляр класса UIGravityBehavior, воспользовавшись ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ initWithItems:. Π­Ρ‚ΠΎΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UIDynamicItem. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ этому ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ всС экзСмпляры UIView, поэтому, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΈΠ΄ Π³ΠΎΡ‚ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ΄Ρ‚ΠΈ дальшС:


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

[super viewDidAppear: animated];


/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ малСнький ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΈ добавляСм Π΅Π³ΠΎ ΠΊ self.view */

self.squareView = [[UIView alloc] initWithFrame:

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

self.squareView.backgroundColor = [UIColor greenColor];

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

[self.view addSubview: self.squareView];


/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ тяготСниС */

self.animator = [[UIDynamicAnimator alloc]

initWithReferenceView: self.view];


UIGravityBehavior *gravity = [[UIGravityBehavior alloc]

initWithItems:@[self.squareView]];


[self.animator addBehavior: gravity];


}

Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ тяготСниС ΠΊΠΎ всСм вашим Π²ΠΈΠ΄Π°ΠΌ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра addItem:, относящСгося ΠΊ классу UIGravityBehavior. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запуститС вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΈΠ΄ Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ появится Π½Π° экранС, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ· Ρ†Π΅Π½Ρ‚Ρ€Π° экрана Π²Π½ΠΈΠ·, Π΄ΠΎ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ дисплСя. ПовСдСниС тяготСния, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ сила тяТСсти, заставляСт элСмСнты Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π²Π½ΠΈΠ·, Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π½Π΅Ρ‚, элСмСнт ΠΏΠ°Π΄Π°Π΅Ρ‚ Π²Π½ΠΈΠ· Π΄ΠΎ бСсконСчности. ΠœΡ‹ исправим этот нСдостаток ΠΏΠΎΠ·ΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π² для элСмСнтов ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСния.

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

Π Π°Π·Π΄Π΅Π» 2.0.

2.2. ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ столкновСний ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π½ΠΈΡ…

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

ВрСбуСтся Π·Π°Π΄Π°Ρ‚ΡŒ Π½Π° экранС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ столкновСний ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ вашСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π»ΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.

РСшСниС

Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° UICollisionBehavior ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈΡΠ²ΠΎΠΉΡ‚Π΅ свойству translatesReferenceBoundsIntoBoundary повСдСния столкновСний Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ YES ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ с Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΌ Π²ΠΈΠ΄ΠΎΠΌ Π² качСствС ΠΎΠΏΠΎΡ€Π½ΠΎΠΉ сущности. Π’Π°ΠΊ Π²Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ распространяСтся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСния (ΠΎ Ρ‡Π΅ΠΌ ΠΌΡ‹ вскорС ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ), Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°.

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

ПовСдСниС столкновСния, относящССся ΠΊ Ρ‚ΠΈΠΏΡƒ UICollisionBehavior, Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ UIDynamicItem. ВсС Π²ΠΈΠ΄Ρ‹ Ρ‚ΠΈΠΏΠ° UIView ΡƒΠΆΠ΅ Π΅ΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚, поэтому Π²Π°ΠΌ придСтся лишь ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваши Π²ΠΈΠ΄Ρ‹ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ повСдСнию столкновСния. ПовСдСниС столкновСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° экранС Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΡ‹ для элСмСнтов, находящихся Π² Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Π΅. НапримСр, Ссли Π²Ρ‹ Π·Π°Π΄Π°Π΄ΠΈΡ‚Π΅ линию, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ ΠΈΠ· Π½ΠΈΠΆΠ½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° вашСго ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° Π² Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» (соотвСтствСнно, это Π±ΡƒΠ΄Π΅Ρ‚ линия, Π²ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ»Π΅Π³Π°ΡŽΡ‰Π°Ρ ΠΊ Π΅Π³ΠΎ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΊΡ€Π°ΡŽ), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΊ этому Π²ΠΈΠ΄Ρƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ тяготСния, Ρ‚ΠΎ Π²ΠΈΠ΄Ρ‹, располоТСнныС Π½Π° экранС, Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ дСйствиСм тяготСния Π²Π½ΠΈΠ·, Π½ΠΎ Π½Π΅ смогут Β«ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΡ‚ΡŒΡΡΒ» с экрана, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ столкнутся с Π΅Π³ΠΎ Π½ΠΈΠΆΠ½ΠΈΠΌ ΠΊΡ€Π°Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ задаСтся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ столкновСния.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ области, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ дСйствуСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ столкновСния, совпадали с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Ρ‚ΠΎ присвойтС свойству translatesReferenceBoundsIntoBoundary экзСмпляра повСдСния столкновСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ YES. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ провСсти Π»ΠΈΠ½ΠΈΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌ Ρ‚Π°ΠΊΠΎΠΉ области, просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ экзСмпляра addBoundaryWithIdentifier: fromPoint: toPoint:, относящимся ΠΊ классу UICollisionBehavior.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ собираСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π° Ρ†Π²Π΅Ρ‚Π½Ρ‹Ρ… Π²ΠΈΠ΄Π°, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… располоТСн Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ПослС этого Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ тяготСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ эти Π²ΠΈΠ΄Ρ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π»ΠΈ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΈΠ΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°).

Π˜Ρ‚Π°ΠΊ, для Π½Π°Ρ‡Π°Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ массив Π²ΠΈΠ΄ΠΎΠ² ΠΈ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€:


#import Β«ViewController.hΒ»


@interface ViewController ()

@property (nonatomic, strong) NSMutableArray *squareViews;

@property (nonatomic, strong) UIDynamicAnimator *animator;

@end

@implementation ViewController


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

ΠŸΠΎΡ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ появится Π½Π° экранС, Π·Π°Π΄Π°Π΄ΠΈΠΌ повСдСния столкновСния ΠΈ тяготСния ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΡ… ΠΊ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€Ρƒ:

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

[super viewDidAppear: animated];


/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄Ρ‹ */

NSUInteger const NumberOfViews = 2;


self.squareViews = [[NSMutableArray alloc] initWithCapacity: NumberOfViews];

NSArray *colors = @[[UIColor redColor], [UIColor greenColor]];


CGPoint currentCenterPoint = self.view.center;

CGSize eachViewSize = CGSizeMake(50.0f, 50.0f);