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

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

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

collision.translatesReferenceBoundsIntoBoundary = YES;


[self.animator addBehavior: collision];

НаконСц, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΠ΄Π°ΠΌ динамичСскоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π²ΠΈΠ΄ ΠΌΠ΅Π½Π΅Π΅ эластичным, Ρ‡Π΅ΠΌ Π½ΠΈΠΆΠ½ΠΈΠΉ:

/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΡΠ»Π°ΡΡ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ элСмСнтов */

UIDynamicItemBehavior *moreElasticItem = [[UIDynamicItemBehavior alloc]

initWithItems:@[bottomView]];


moreElasticItem.elasticity = 1.0f;

UIDynamicItemBehavior *lessElasticItem = [[UIDynamicItemBehavior alloc]

initWithItems:@[topView]];

lessElasticItem.elasticity = 0.5f;

[self.animator addBehavior: moreElasticItem];

[self.animator addBehavior: lessElasticItem];


Π˜Ρ‚Π°ΠΊ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΡΠΊΠ°ΠΊΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ экрана, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ударятся ΠΎΠ± Π½Π΅Π΅ (рис. 2.4).


Рис. 2.4. Один Π²ΠΈΠ΄ эластичнСС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ

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

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

Π“Π»Π°Π²Π°3. АвтоматичСская ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΈ язык Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования

3.0. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса всСгда Π±Ρ‹Π»ΠΎ для программиста большой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ² Π²ΠΈΠ΄ΠΎΠ² Π² слоТных прилоТСниях для iOS содСрТится мноТСство ΠΊΠΎΠ΄Π°, Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ якобы Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊ упорядочСниС Π½Π° экранС Ρ„Ρ€Π΅ΠΉΠΌΠ° с графичСскими элСмСнтами, Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ ΠΈ обСспСчСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… вСрсиях iOS. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² этом, вСдь ΠΌΠ½ΠΎΠ³ΠΈΠ΅ программисты ΠΆΠ΅Π»Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ Π²ΠΈΠ΄ΠΎΠ² Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… устройствах, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° iPhone ΠΈ iPad. Из-Π·Π° этого ΠΊΠΎΠ΄ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ услоТняСтся. Apple упростила для нас Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡, прСдоставив Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ автоматичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ (Auto Layout). АвтоматичСская ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°, Π΄Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ²ΡˆΠ°ΡΡΡ Π² OS X, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΈ Π² iOS. Π§ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± автоматичСской ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅, Π½ΠΎ для Π½Π°Ρ‡Π°Π»Π° я позволю сСбС ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ расскаТу, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° Π½ΡƒΠΆΠ½Π°.

Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠ°, которая ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана. ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π²ΠΈΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° находится, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

β€’ ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ center.x Ρ€Π°Π²Π½ΠΎ свойству Π²ΠΈΠ΄Π° center.x;

β€’ ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ center.y Ρ€Π°Π²Π½ΠΎ свойству Π²ΠΈΠ΄Π° center.y.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Apple Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ элСмСнтов ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Ρ€Π΅ΡˆΠ°Π΅ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простой Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹:


object1.property1 = (object2.property2 * multiplier) + constant value


НапримСр, воспользовавшись этой Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ, я ΠΌΠΎΠ³Ρƒ Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² Π΅Π΅ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅, Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:


button.center.x = (button.superview.center.x * 1) + 0

button.center.y = (button.superview.center.y * 1) + 0


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎ-настоящСму ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для iOS β€” Π²Π΅Ρ‰ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ Π±Ρ‹Π»ΠΈ просто нСосущСствимы. Π’ iOS SDK Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Π°Ρ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Π° Π² класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся NSLayoutConstraint. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр этого класса соотвСтствуСт Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡŽ. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π²ΠΈΠ΄Π°, Π²Π»Π°Π΄Π΅ΡŽΡ‰Π΅Π³ΠΎ этой ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ, Ρ‚ΠΎ трСбуСтся Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x ΠΈ y этой ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ создании Π΄Π²ΡƒΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Но Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ познакомимся с языком Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования (Visual Format Language). Он ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ дополняСт язык программирования для iOS ΠΈ Π΅Ρ‰Π΅ сильнСС ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΌΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… пСрСкрСстных Π²ΠΈΠ΄ΠΎΠ². НапримСр, Ссли Π² ΠΎΠ΄Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Ρƒ вас находится Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π±Ρ‹Π»ΠΎ 100 Ρ‚ΠΎΡ‡Π΅ΠΊ свободного пространства, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ Π±Ρ‹ это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ ΠΎΠ±Π΅ΠΈΡ… этих ΠΊΠ½ΠΎΠΏΠΎΠΊ. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, это Π²Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠΈ Π²ΠΈΠ΄. Π’ΠΎΡ‚ эти ΠΏΡ€Π°Π²ΠΈΠ»Π°.

β€’ Π•сли ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ находится ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π²ΠΈΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ ΠΎΠ±ΠΎΠΈΡ… этих Π²ΠΈΠ΄ΠΎΠ² ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰ΠΈΠΉ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²ΠΈΠ΄), Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ограничСния ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ.

β€’ Π•сли ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ находится ΠΌΠ΅ΠΆΠ΄Ρƒ Π²ΠΈΠ΄ΠΎΠΌ ΠΈ Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Π²ΠΈΠ΄ΠΎΠΌ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ.

β€’ Π•сли ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ находится ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π²ΠΈΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… вас Π²ΠΈΠ΄ΠΎΠ².


На рис. 3.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ эти ограничСния.


Рис. 3.1. ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ограничСниями ΠΈ Π²ΠΈΠ΄Π°ΠΌΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ эти ограничСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ


ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса constraintWithItem: attribute: related By: toItem: attribute: multiplier: constant:, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ относится ΠΊ классу NSLayoutConstraint. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

β€’ constraintWithItem β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° id. Он соотвСтствуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ object1 Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅, рассмотрСнной Ρ€Π°Π½Π΅Π΅;

β€’ attribute β€” этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ прСдставляСт свойство property1 Π² Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΈΠΏΡƒ NSLayoutAttribute;

β€’ relatedBy β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ соотвСтствуСт Π·Π½Π°ΠΊΡƒ равСнства Π² нашСй Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° относится ΠΊ Ρ‚ΠΈΠΏΡƒ NSLayoutRelation ΠΈ, ΠΊΠ°ΠΊ Π²Ρ‹ вскорС ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС Π·Π½Π°ΠΊΠ° равСнства, Π½ΠΎ ΠΈ Π² Ρ€ΠΎΠ»ΠΈ Π·Π½Π°ΠΊΠΎΠ² «большС» ΠΈ «мСньшС». ΠœΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ обсудим эти Π½ΡŽΠ°Π½ΡΡ‹ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅;

β€’ toItem β€” это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° id. Он соотвСтствуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ object2 Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅, рассмотрСнной Ρ€Π°Π½Π΅Π΅;

β€’ attribute β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ прСдставляСт свойство property2 Π² Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΈΠΏΡƒ NSLayoutAttribute;

β€’ multiplier β€” это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° CGFloat, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ Π² нашСй Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅;

β€’ constant β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ относится ΠΊ Ρ‚ΠΈΠΏΡƒ CGFloat ΠΈ прСдставляСт константу Π² Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅.


ПослС создания ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π²Ρ‹ смоТСтС просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²ΠΈΠ΄Ρƒ (рис. 3.1), воспользовавшись ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса UIView:

β€’ addConstraint: β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π²ΠΈΠ΄Ρƒ ΠΎΠ΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° NSLayoutConstraint;

β€’ addConstraints: β€” этот ΠΌΠ΅Ρ‚ΠΎΠ΄ позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π²ΠΈΠ΄Ρƒ массив ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΈΠΏΡƒ NSLayoutConstraint, Π½ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚Ρ‹ Π² массив Ρ‚ΠΈΠΏΠ° NSArray.


АвтоматичСская ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° позволяСт Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Π² Ρ‡Π΅ΠΌ Π²Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части этой Π³Π»Π°Π²Ρ‹. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с этой Ρ‚Π΅ΠΌΠΎΠΉ, Ρ‚Π΅ΠΌ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΊΡ‚: примСняя Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΡƒ, Π²Ρ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ всС Π½ΠΎΠ²Ρ‹Π΅ ограничСния Ρ‚ΠΈΠΏΠ° NSLayoutConstraint. Из-Π·Π° этого ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ, Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π΅Π³ΠΎ β€” постоянно ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒΡΡ. ИмСнно поэтому компания Apple Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° язык Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ограничСния, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ символами ASCII. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ эти ΠΊΠ½ΠΎΠΏΠΊΠΈ всСгда отстояли Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π½Π° 100 Ρ‚ΠΎΡ‡Π΅ΠΊ, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° языкС Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄:


[button1]-100-[button2]


ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ, Π²Ρ‹Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Π½Π° языкС Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса constraintsWithVisualFormat: options: metrics: views:, относящСгося ΠΊ классу NSLayoutConstraint. Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

β€’ constraintsWithVisualFormat β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° языкС Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования, записанноС ΠΊΠ°ΠΊ NSString;

β€’ options β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° NSLayoutFormatOptions. ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с языком Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ пСрСдаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0;

β€’ metrics β€” ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ констант, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½Π° языкС Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ форматирования. Пока Ρ€Π°Π΄ΠΈ упрощСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nil;

β€’ views β€” это ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π²ΠΈΠ΄ΠΎΠ², для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ написали ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ NSDictionaryOfVariableBindings ΠΈΠ· языка C ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ваши Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠšΠ»ΡŽΡ‡ΠΈ Π² этом словарС β€” это названия Π²ΠΈΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. НС ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅, Ссли ΠΏΠΎΠΊΠ° всС это каТСтся странным ΠΈ Π΄Π°ΠΆΠ΅ бСссмыслСнным. ВскорС всС Π±ΡƒΠ΄Π΅Ρ‚ понятно! Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², сразу получится стройная ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π°.


Π’ΠΎΠΎΡ€ΡƒΠΆΠΈΠ²ΡˆΠΈΡΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, Π½Π΅ забивая Π³ΠΎΠ»ΠΎΠ²Ρƒ Π½ΠΈΡ‡Π΅ΠΌ лишним, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ практичСским Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ. Π’ качСствС зарядки поупраТняСмся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ с ограничСниями. Π“ΠΎΡ‚ΠΎΠ²Ρ‹? ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

3.1. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана

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

ВрСбуСтся ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ экрана. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΌΡ‹ собираСмся Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π²ΠΈΠ΄ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π΅Π³ΠΎ Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ.

РСшСниС