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

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

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

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

CGContextRef currentContext = UIGraphicsGetCurrentContext();


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

CGContextSetLineWidth(currentContext,

5.0f);


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

CGContextMoveToPoint(currentContext,

50.0f,

10.0f);


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

CGContextAddLineToPoint(currentContext,

100.0f,

200.0f);


/* Π”ля отрисовки Π»ΠΈΠ½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†Π²Π΅Ρ‚, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² контСкстС Π² настоящий

ΠΌΠΎΠΌΠ΅Π½Ρ‚. */

CGContextStrokePath(currentContext);


}


Запустив этот ΠΊΠΎΠ΄ Π² симуляторС iOS, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠ°ΠΊ Π½Π° рис. 17.17.


Рис. 17.17. РисованиС Π»ΠΈΠ½ΠΈΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ графичСском контСкстС


ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Как Π±Ρ‹Π»ΠΎ упомянуто Ρ€Π°Π½Π΅Π΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° CGContextAddLineToPoint ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π΄Π°Π½Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. А Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ линию ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ (20; 20) Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (100; 100), Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ…ΠΎΡ‚ΠΈΠΌ провСсти линию ΠΈΠ· Ρ‚ΠΎΡ‡ΠΊΠΈ (100; 100) Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (300; 100)? ΠœΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вСрсия, Ρ‡Ρ‚ΠΎ, нарисовав ΠΏΠ΅Ρ€Π²ΡƒΡŽ линию, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€ΠΎ Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (100; 100) с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ CGContextMoveToPoint, Π° ΠΏΠΎΡ‚ΠΎΠΌ провСсти линию Π² Ρ‚ΠΎΡ‡ΠΊΡƒ (300; 100), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ CGContextAddLineToPoint. Π”Π°, это сработаСт, Π½ΠΎ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивным способом. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ CGContextAddLineToPoint для указания ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ отрисовываСмой Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π»ΠΈΠ½ΠΈΠΈ, ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вашСго ΠΏΠ΅Ρ€Π° измСнится Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ. Π˜Π½Ρ‹ΠΌΠΈ словами, послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ выпуститС ΠΌΠ΅Ρ‚ΠΎΠ΄, воспользовавшись ΠΏΠ΅Ρ€ΠΎΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ поставит ΠΏΠ΅Ρ€ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» отрисован (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ). Π˜Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ линию ΠΈΠ· Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π² Π½ΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ, Π½ΡƒΠΆΠ½ΠΎ просто Π΅Ρ‰Π΅ Ρ€Π°Π· Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ CGContextAddLineToPoint, сообщив Π΅ΠΉ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


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


/* Π—Π°Π΄Π°Π΅ΠΌ Ρ†Π²Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅ΠΌΡΡ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ линию. */

[[UIColor brownColor] set];


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

CGContextRef currentContext = UIGraphicsGetCurrentContext();


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

CGContextSetLineWidth(currentContext,

5.0f);


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

CGContextMoveToPoint(currentContext,

20.0f,

20.0f);


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

CGContextAddLineToPoint(currentContext,

100.0f,

100.0f);


/* ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ линию Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ. */

CGContextAddLineToPoint(currentContext,

300.0f,

100.0f);


/* Π”ля отрисовки Π»ΠΈΠ½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†Π²Π΅Ρ‚, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² контСкстС Π² настоящий

ΠΌΠΎΠΌΠ΅Π½Ρ‚. */

CGContextStrokePath(currentContext);


}


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½Π° рис. 17.18. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π΅ Π»ΠΈΠ½ΠΈΠΈ, Π½Π΅ пСрСмСщая ΠΏΠ΅Ρ€ΠΎ для отрисовки Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ.

Π’ΠΎΡ‡ΠΊΠ° соСдинСния Π΄Π²ΡƒΡ… Π»ΠΈΠ½ΠΈΠΉ называСтся ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΎΠΉ (Join). Работая с Core Graphics, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ линиями, сочлСнСнными Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° CGContextSetLineJoin. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, графичСский контСкст, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΡƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, сам Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ, CGLineJoin. CGLineJoin β€” это ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:


Рис. 17.18. ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ отрисовываСм Π΄Π²Π΅ Π»ΠΈΠ½ΠΈΠΈ


β€’ kCGLineJoinMiter β€” Π½Π° мСстС ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ образуСтся острый ΡƒΠ³ΠΎΠ». Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ задаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ;

β€’ kCGLineJoinBevel β€” ΡƒΠ³ΠΎΠ» Π½Π° мСстС ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ Π»ΠΈΠ½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ спрямлСн, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ обтСсан;

β€’ kCGLineJoinRound β€” ΠΊΠ°ΠΊ понятно ΠΈΠ· названия, такая ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠ° β€” скруглСнная.


Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π² графичСском контСкстС «скатныС ΠΊΡ€Ρ‹ΡˆΠΈΒ», каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»Π° Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ линиями, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ Β«ΠΊΡ€Ρ‹ΡˆΠ΅ΠΉΒ» тСкст с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получится рисунок, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉ рис. 17.19.


Рис. 17.19. Π’Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡Π΅ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ линиями, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Core Graphics


Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ я написал ΠΌΠ΅Ρ‚ΠΎΠ΄ drawRooftopAtTopPointof: textToDisplay: lineJoin:, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

β€’ Ρ‚ΠΎΡ‡ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π²Π΅Ρ€Ρ…ΡƒΡˆΠΊΠ° Β«ΠΊΡ€Ρ‹ΡˆΠΈΒ»;

β€’ Ρ‚Скст, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎΠ΄ Β«ΠΊΡ€Ρ‹ΡˆΠ΅ΠΉΒ»;

β€’ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΠΈ.


Код Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:


β€” (void) drawRooftopAtTopPointof:(CGPoint)paramTopPoint

textToDisplay:(NSString *)paramText

lineJoin:(CGLineJoin)paramLineJoin{


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

[[UIColor brownColor] set];


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

CGContextRef currentContext = UIGraphicsGetCurrentContext();


/* Π—Π°Π΄Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΡ‹Ρ‡ΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ линиями. */

CGContextSetLineJoin(currentContext,

paramLineJoin);


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

CGContextSetLineWidth(currentContext,

20.0f);


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

CGContextMoveToPoint(currentContext,

paramTopPoint.x β€” 140,

paramTopPoint.y + 100);


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

CGContextAddLineToPoint(currentContext,

paramTopPoint.x,

paramTopPoint.y);


/* ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ линию Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ Ρ„ΠΈΠ³ΡƒΡ€Π°,

Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π°Ρ ΠΊΡ€Ρ‹ΡˆΡƒ. */

CGContextAddLineToPoint(currentContext,

paramTopPoint.x + 140,

paramTopPoint.y + 100);


/* Π”ля отрисовки Π»ΠΈΠ½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†Π²Π΅Ρ‚, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² контСкстС Π² настоящий

ΠΌΠΎΠΌΠ΅Π½Ρ‚. */

CGContextStrokePath(currentContext);


/* Π ΠΈΡΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ ΠΊΡ€Ρ‹ΡˆΠ΅ΠΉ тСкст, ΠΏΡ€ΠΈ этом ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚. */

[[UIColor blackColor] set];


/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ рисуСм тСкст. */

CGPoint drawingPoint = CGPointMake(paramTopPoint.x β€” 40.0f,

paramTopPoint.y + 60.0f);

[paramText drawAtPoint: drawingPoint

withFont: [UIFont boldSystemFontOfSize:30.0f]];


}

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ наш ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ экзСмпляра drawRect: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-Π²ΠΈΠ΄Π°, Π³Π΄Π΅ находится графичСский контСкст:

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


[self drawRooftopAtTopPointof: CGPointMake(160.0f, 40.0f)

textToDisplay:@"Miter"

lineJoin: kCGLineJoinMiter];


[self drawRooftopAtTopPointof: CGPointMake(160.0f, 180.0f)

textToDisplay:@"Bevel"

lineJoin: kCGLineJoinBevel];


[self drawRooftopAtTopPointof: CGPointMake(160.0f, 320.0f)

textToDisplay:@"Round"

lineJoin: kCGLineJoinRound];

}

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

Π Π°Π·Π΄Π΅Π»Ρ‹ 17.3 ΠΈ 17.7.

17.7. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π΅ΠΉ

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

НСобходимо ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π² графичСском контСкстС любой ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€.

РСшСниС

Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈ отрисовывайтС ΠΏΡƒΡ‚ΠΈ.

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

Если Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ рядом ΡΠ΅Ρ€ΠΈΡŽ Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρƒ. БСрия Ρ„ΠΈΠ³ΡƒΡ€, составлСнных вмСстС, ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΡƒΡ‚ΡŒ. Π£ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ путями Π² Core Graphics ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 17.6 ΠΌΡ‹ опосрСдованно Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с путями, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ функциями CGContext. Но Π² Core Graphics Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с путями Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. ВскорС ΠΌΡ‹ с Π½ΠΈΠΌΠΈ познакомимся.

ΠŸΡƒΡ‚ΠΈ относятся ΠΊ Ρ‚ΠΎΠΌΡƒ графичСскому контСксту, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ нарисованы. Π£ ΠΏΡƒΡ‚Π΅ΠΉ Π½Π΅Ρ‚ Π³Ρ€Π°Π½ΠΈΡ† Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ², Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΠΈΠ³ΡƒΡ€, рисуСмых ΠΏΠΎ Π½ΠΈΠΌ. Однако Ρƒ ΠΏΡƒΡ‚Π΅ΠΉ Π΅ΡΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°ΠΌΠΊΠΈ. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Ρ€Π°ΠΌΠΊΠ° β€” Π½Π΅ тоТдСствСнныС понятия. Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ β€” это ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π° холстС, Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Ρ€Π°ΠΌΠΊΠ° ΠΏΡƒΡ‚ΠΈ β€” это наимСньший ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся всС Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, отрисованныС ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ. ΠŸΡƒΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с ΠΌΠ°Ρ€ΠΊΠ°ΠΌΠΈ, Π° графичСский контСкст β€” с ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΠΌ для письма. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΊΡƒ Π΄Ρ€ΡƒΠ³Ρƒ, ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Ρ‹ для Π½Π΅Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ количСство ΠΌΠ°Ρ€ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π°ΠΊΠ»Π΅ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ (Π² нашСм случаС ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΏΡƒΡ‚ΠΈ).

Когда Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚Π΅ рисованиС Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΡƒΡ‚ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΡƒΡ‚ΡŒ Π² графичСском контСкстС. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ доводилось Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ³Ρ€, Π·Π½Π°ΠΊΠΎΠΌΡ‹ с понятиСм Π±ΡƒΡ„Π΅Ρ€Π°. Π‘ΡƒΡ„Π΅Ρ€ отрисовываСт Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½Ρ‹Π΅ Π·Π° Π½ΠΈΠΌ сцСны ΠΈ Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сбрасываСт это содСрТимоС Π½Π° экран. ΠŸΡƒΡ‚ΠΈ β€” это, Π² сущности, Π±ΡƒΡ„Π΅Ρ€Ρ‹. Они Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, рисуСмыС Π½Π° холстС.

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ ΠΊ нСпосрСдствСнной Ρ€Π°Π±ΠΎΡ‚Π΅ с путями, Π½Π°Ρ‡Π½Π΅ΠΌ с создания самого ΠΏΡƒΡ‚ΠΈ. ΠœΠ΅Ρ‚ΠΎΠ΄, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΠΈΠΉ ΠΏΡƒΡ‚ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅ΡˆΠΈΡ‚Π΅ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π½Π° этом ΠΏΡƒΡ‚ΠΈ. ΠžΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ пСрСдаСтся Core Graphics для справки. Π‘ΠΎΠ·Π΄Π°Π² ΠΏΡƒΡ‚ΡŒ, Π²Ρ‹ смоТСтС Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ, Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. ΠŸΡƒΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π·Π°Π»ΠΈΠ²ΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ‚Ρ€ΠΈΡ…Π°ΠΌΠΈ Π² графичСском контСкстС. Π’ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ придСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ: