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

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

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

Рис. 17.13. ΠžΠ±Π»Π°ΡΡ‚ΡŒ изобраТСния, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π²Π½Π° ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅


И Π²ΠΎΡ‚ начинаСтся самоС интСрСсноС. Как ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ iOS SDK, ΠΊΠ°ΠΊΠΈΠ΅ части изобраТСния ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ, Π° ΠΊΠ°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ? ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Π² iOS SDK ΡƒΠΆΠ΅ прСдусмотрСна такая Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ. Π‘Π½Π°Ρ‡Π°Π»Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ вашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ API UIImage, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² этой Π³Π»Π°Π²Π΅. Π‘ΠΎΠ·Π΄Π°Π² экзСмпляр UIImage с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ этот экзСмпляр Π² Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра resizableImageWithCapInsets:, относящСгося ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΊ рассматриваСмому экзСмпляру. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, относится ΠΊ Ρ‚ΠΈΠΏΡƒ UIEdgeInsets, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, опрСдСляСтся Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:


typedef struct UIEdgeInsets {

CGFloat top, left, bottom, right;

} UIEdgeInsets;


ΠšΡ€Π°Π΅Π²Ρ‹Π΅ отступы Π½ΡƒΠΆΠ½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ дСвятичастныС изобраТСния (nine-part images Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Apple). Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ изобраТСния, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π² сСбя ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π΅Π²ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

β€’ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»;

β€’ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΡ€Π°ΠΉ;

β€’ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»;

β€’ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΊΡ€Π°ΠΉ;

β€’ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»;

β€’ Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΡ€Π°ΠΉ;

β€’ Π½ΠΈΠΆΠ½ΠΈΠΉ Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»;

β€’ Π»Π΅Π²Ρ‹ΠΉ ΠΊΡ€Π°ΠΉ;

β€’ Ρ†Π΅Π½Ρ‚Ρ€.


На рис. 17.14 всС ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ максимально наглядно.


Рис. 17.14. ДСвятичастноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅


Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² дСвятичастном Π²ΠΈΠ΄Π΅ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ программист ΠΌΠΎΠ³ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ практичСски ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Когда программисту трСбуСтся Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ. Никогда Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΡƒΠ³Π»ΠΎΠ². Адаптация Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

β€’ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΠΊΡ€Π°ΠΉ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° изобраТСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅, Π½ΠΎ Π½Π΅ ΠΏΠΎ высотС;

 ΠΏΡ€Π°Π²Ρ‹ΠΉ ΠΊΡ€Π°ΠΉ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° изобраТСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ высотС, Π½ΠΎ Π½Π΅ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅;

 Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΊΡ€Π°ΠΉ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° изобраТСния, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ края, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅, Π½ΠΎ Π½Π΅ ΠΏΠΎ высотС;

 Π»Π΅Π²Ρ‹ΠΉ ΠΊΡ€Π°ΠΉ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° изобраТСния, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ края, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ высотС, Π½ΠΎ Π½Π΅ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅;

 Ρ†Π΅Π½Ρ‚Ρ€ β€” Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠΎ высотС, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΡˆΠΈΡ€ΠΈΠ½Π΅.


ЗначСния отступов ΠΏΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ, Π»Π΅Π²ΠΎΠΌΡƒ, Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ ΠΈ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ краям Π·Π°Π΄Π°ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ‚ΠΎΠΉ области, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ. НапримСр, Π²Ρ‹ Π·Π°Π΄Π°Π»ΠΈ для Π»Π΅Π²ΠΎΠ³ΠΎ края Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 10, для Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ края β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 11, для ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ края β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 14 ΠΈ для Π½ΠΈΠΆΠ½Π΅Π³ΠΎ β€” 5. Π’Π°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ iOS провСсти Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ линию Π² 10 Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΎΡ‚ Π»Π΅Π²ΠΎΠ³ΠΎ края, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ линию Π² 11 Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΎΡ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ края, Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ линию Π² 14 Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ края ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ линию Π² 5 Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ края. ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ ΠΌΠ΅ΠΆΠ΄Ρƒ этими линиями, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ (являСтся Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠΉ), Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π²Π½Π΅ этого ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° β€” Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚. Если всС каТСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (вашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅), Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°Ρ‡Π΅Ρ€Ρ‚ΠΈΡ‚Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ внСшнСго β€” Π½Π΅Ρ‚. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ вновь Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ (рис. 17.15).


Рис. 17.15. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ измСняСмой части изобраТСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ отступов ΠΎΡ‚ ΠΊΡ€Π°Π΅Π²

На самом Π΄Π΅Π»Π΅ отступы слСва ΠΈ справа Π½Π° рис. 17.15 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. ΠžΡ‚ΡΡ‚ΡƒΠΏΡ‹ ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΊΡ€Π°Π΅Π² Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. Π― ΡƒΠΊΠ°Π·Π°Π» для Π½ΠΈΡ… Ρ€Π°Π·Π½Ρ‹Π΅ значСния лишь для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ процСсс создания отступов Π±Ρ‹Π» Π±ΠΎΠ»Π΅Π΅ понятным ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ. Если Π±Ρ‹ всС значСния отступов Π±Ρ‹Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, Ρ‚ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ: Π° ΠΎ ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠ· отступов сСйчас ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ?

Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ изобраТСния, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 17.15, ΠΊΡ€Π°Π΅Π²Ρ‹Π΅ отступы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:


UIEdgeInsets edgeInsets;

edgeInsets.left = 20.0f;

edgeInsets.top = 10.0f;

edgeInsets.right = 24.0f;

edgeInsets.bottom = 14.0f;


А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ возвращаСмся ΠΊ ΡƒΡ‡Π΅Π±Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ попытаСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½Π° рис. 17.13, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠœΡ‹ создадим ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ помСстим Π΅Π΅ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ СдинствСнного Π²ΠΈΠ΄Π°, находящСгося Π² нашСм ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π΅ Π²ΠΈΠ΄Π°. На ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ написано Stretched Image on Button (АдаптивноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅). Кнопка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ 200 Ρ‚ΠΎΡ‡Π΅ΠΊ Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ 44 Ρ‚ΠΎΡ‡ΠΊΠΈ Π² высоту. Π’ΠΎΡ‚ наш ΠΊΠΎΠ΄:


#import Β«ViewController.hΒ»


@interface ViewController ()

@property (nonatomic, strong) UIButton *button;

@end


@implementation ViewController


β€” (void)viewDidLoad{

[super viewDidLoad];


/* Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ */

self.button = [UIButton buttonWithType: UIButtonTypeCustom];

[self.button setFrame: CGRectMake(0.0f, 0.0f, 200.0f, 44.0f)];


/* Π—Π°Π΄Π°Π΅ΠΌ надпись для ΠΊΠ½ΠΎΠΏΠΊΠΈ */

[self.button setTitle:@"Stretched Image on Button"

forState: UIControlStateNormal];


/* ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ для тСкста */

self.button.titleLabel.font = [UIFont systemFontOfSize:15.0f];


/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ */

UIImage *image = [UIImage imageNamed:@"Button"];

UIEdgeInsets edgeInsets;

edgeInsets.left = 14.0f;

edgeInsets.top = 0.0f;

edgeInsets.right = 14.0f;

edgeInsets.bottom = 0.0f;

image = [image resizableImageWithCapInsets: edgeInsets];


/* Π—Π°Π΄Π°Π΅ΠΌ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для ΠΊΠ½ΠΎΠΏΠΊΠΈ */

[self.button setBackgroundImage: image forState: UIControlStateNormal];


[self.view addSubview: self.button];

self.button.center = self.view.center;


}


@end


Π’Π΅ΠΏΠ΅Ρ€ΡŒ, запустив ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΊΠ°ΠΊ Π½Π° рис. 17.16.


Рис. 17.16. На экранС находится ΠΊΠ½ΠΎΠΏΠΊΠ° с Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ

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

Π Π°Π·Π΄Π΅Π» 17.4.

17.6. ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° Π»ΠΈΠ½ΠΈΠΉ

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

ВрСбуСтся просто Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ Π² графичСском контСкстС.

РСшСниС

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ для вашСго графичСского контСкста, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ функциями CGContextMoveToPoint ΠΈ CGContextAddLineToPoint для отрисовки Π»ΠΈΠ½ΠΈΠΈ.

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

Когда ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ рисовании Ρ„ΠΈΠ³ΡƒΡ€ Π² iOS ΠΈΠ»ΠΈ OS X, ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ ΠΏΡƒΡ‚ΠΈ (paths). Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡƒΡ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС? ΠŸΡƒΡ‚ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ нСсколькими сСриями Ρ‚ΠΎΡ‡Π΅ΠΊ, располоТСнными Π½Π° экранС. ΠœΠ΅ΠΆΠ΄Ρƒ путями ΠΈ линиями сущСствуСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Π½ΠΈΡ†Π°. ΠŸΡƒΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько Π»ΠΈΠ½ΠΈΠΉ, Π½ΠΎ линия Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ нСсколько ΠΏΡƒΡ‚Π΅ΠΉ. Π‘Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡƒΡ‚ΡŒ β€” это просто сСрия Ρ‚ΠΎΡ‡Π΅ΠΊ.

Π›ΠΈΠ½ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ путями. Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΏΡƒΡ‚ΠΈ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠΈΡ‚Π΅ Core Graphics Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот ΠΏΡƒΡ‚ΡŒ Π·Π° вас. Core Graphics считаСт, Ρ‡Ρ‚ΠΎ Π²Ρ‹ создали линию вдоль этого ΠΏΡƒΡ‚ΠΈ, ΠΈ нарисуСт Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π²Π°ΠΌΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠΌ (см. Ρ€Π°Π·Π΄Π΅Π» 17.3).

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΌΡ‹ рассмотрим ΠΏΡƒΡ‚ΠΈ Π² дальнСйшСм (Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 17.7), Π° ΠΏΠΎΠΊΠ° сосрСдоточимся Π½Π° Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡƒΡ‚Π΅ΠΉ прямыС Π»ΠΈΠ½ΠΈΠΈ. Для этого Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги.

1. Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ Π² вашСм графичСском контСкстС (см. Ρ€Π°Π·Π΄Π΅Π» 17.3).

2. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ графичСского контСкста β€” это дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ UIGraphicsGetCurrentContext.

3. Π—Π°Π΄Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ для Π»ΠΈΠ½ΠΈΠΈ, воспользовавшись ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ CGContextMoveToPoint.

4. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΎ Π² графичСском контСкстС, воспользовавшись ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ CGContextAddLineToPoint, ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π»ΠΈΠ½ΠΈΠΈ.

5. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ CGContextStrokePath. Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° отрисуСт ΠΏΡƒΡ‚ΡŒ Π² графичСском контСкстС, использовав ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Π°ΠΌΠΈ Ρ†Π²Π΅Ρ‚.


ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ CGContextSetLineWidth, которая Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ Π»ΠΈΠ½ΠΈΠΉ, отрисовываСмых Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ графичСском контСкстС. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ этой ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ β€” графичСский контСкст, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ рисуСтС, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ, выраТаСмая числом с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (CGFloat).

Π’ iOS Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ измСряСтся Π² логичСских Ρ‚ΠΎΡ‡ΠΊΠ°Ρ….

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


β€” (void)drawRect:(CGRect)rect{


/* Π—Π°Π΄Π°Π΅ΠΌ Ρ†Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ собираСмся ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ линию. */

[[UIColor brownColor] set];


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ графичСский контСкст. */

CGContextRef currentContext = UIGraphicsGetCurrentContext();


/* Π—Π°Π΄Π°Π΅ΠΌ Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Ρƒ Π»ΠΈΠ½ΠΈΠΈ. */

CGContextSetLineWidth(currentContext,

5.0f);


/* Π’ этой Ρ‚ΠΎΡ‡ΠΊΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ линия. */

CGContextMoveToPoint(currentContext,

50.0f,

10.0f);


/* Π’ этой Ρ‚ΠΎΡ‡ΠΊΠ΅ линия Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ. */