β’ CGPathCreateMutable (ΡΡΠ½ΠΊΡΠΈΡ) β ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΏΡΡΡ ΡΠΈΠΏΠ° CGMutablePathRef ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠΌ ΠΏΡΡΠ΅ΠΌ, ΠΎΡ Π½Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ β ΠΎΠ± ΡΡΠΎΠΌ ΠΌΡ Π²ΡΠΊΠΎΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ;
β’ CGPathMoveToPoint (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°) β ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅Ρ Π½Π° ΠΏΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ°. ΠΠ΅ΡΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΡΠΊΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΈΠΏΠ° CGPoint;
β’ CGPathAddLineToPoint (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°) β ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅Ρ ΡΠ΅Π³ΠΌΠ΅Π½Ρ Π»ΠΈΠ½ΠΈΠΈ ΠΎΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΏΠ΅ΡΠ° Π΄ΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ (ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΡΡ ΠΆΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° CGPoint);
β’ CGContextAddPath (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°) β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΡΡΡ (Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π·Π΄Π΅ΡΡ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ) Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. ΠΡΠΎΡ ΠΏΡΡΡ Π³ΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ;
β’ CGContextDrawPath (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°) β ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅Ρ Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΡΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅;
β’ CGPathRelease (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°) β Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΠ°ΠΌΡΡΡ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΡΠΈ;
β’ CGPathAddRect (ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°) β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ ΠΏΡΡΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ. ΠΡΠ°Π½ΠΈΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΡΠΊΠ°Π·Π°Π½Ρ Π² ΡΡΡΡΠΊΡΡΡΠ΅ CGRect.
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠΈ Π²Π°ΠΆΠ½ΡΡ ΡΠΈΡΠΎΠ²Π°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ CGContextDrawPath:
β’ kCGPathStroke β ΡΠΈΡΡΠ΅Ρ Π»ΠΈΠ½ΠΈΡ (ΡΡΡΠΈΡ ), ΠΎΡΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΊΡΠΎΠΌΠΊΡ ΠΏΡΡΠΈ. Π¨ΡΡΠΈΡ ΡΠΈΡΡΠ΅ΡΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π²ΡΠ±ΡΠ°Π½Π½ΡΠΌ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ;
β’ kCGPathFill β Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ²Π΅ΡΠΎΠΌ Π·Π°Π»ΠΈΠ²ΠΊΠΈ ΠΎΠ±Π»Π°ΡΡΡ, Π²ΠΎΠΊΡΡΠ³ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠΏΠΈΡΠ°Π½ ΠΏΡΡΡ. ΠΠ°Π»ΠΈΠ²ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ²Π΅ΡΠ΅, Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ;
β’ kCGPathFillStroke β ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠ΅Ρ ΡΡΡΠΈΡ ΠΈ Π·Π°Π»ΠΈΠ²ΠΊΡ. ΠΠ»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ Π·Π°Π»ΠΈΠ²ΠΊΠΈ, Π° Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΠ²Π΅Ρ ΡΡΡΠΈΡ Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΡΠΈ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ Π³ΠΎΠ»ΡΠ±ΡΡ Π»ΠΈΠ½ΠΈΡ, ΠΈΠ΄ΡΡΡΡ ΠΏΠΎ ΡΠΊΡΠ°Π½Ρ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π° Π² Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡΠ°Π²ΡΠΉ, ΠΈ Π΄ΡΡΠ³ΡΡ Π»ΠΈΠ½ΠΈΡ, ΠΈΠ΄ΡΡΡΡ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π° Π² Π»Π΅Π²ΡΠΉ Π½ΠΈΠΆΠ½ΠΈΠΉ. Π’Π°ΠΊ ΠΌΡ Π½Π°ΡΠΈΡΡΠ΅ΠΌ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΡΠ΅ΡΡ, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠΈΠΉ Π±ΡΠΊΠ²Ρ Β«XΒ».
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠ΄Π°Π»ΠΈΠ» ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅ iOS ΡΡΠ°ΡΡΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Ρ ΠΎΡΠΈΡΠ΅ Ρ ΡΡΠΈΠΌ Π²ΠΎΠ·ΠΈΡΡΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΊΠΎΠ΄Ρ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π΄Π°Π»Π΅Π΅. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΡΠ°ΡΡΡΠ½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ Π»ΠΈΡΡ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΌΠΎΠ΅ΠΌ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅. Π§ΡΠΎΠ±Ρ ΡΠΊΡΡΡΡ ΡΡΠ°ΡΡΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ, Π½Π°ΠΉΠ΄ΠΈΡΠ΅ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Xcode ΡΠ°ΠΉΠ» Info.plist ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΊΠ»ΡΡ UIStatusBarHidden ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ YES (ΡΠΈΡ. 17.20). Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΡΠΊΡΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ°ΡΡΡΠ½Π°Ρ ΠΏΠ°Π½Π΅Π»Ρ Π±ΡΠ΄Π΅Ρ ΡΠΊΡΡΡΠ°.
Π ΠΈΡ. 17.20. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ Info.plist, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠΊΡΡΡΡ ΡΡΠ°ΡΡΡΠ½ΡΡ ΠΏΠ°Π½Π΅Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ iOS
β (void)drawRect:(CGRect)rect{
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡ. */
CGMutablePathRef path = CGPathCreateMutable();
/* ΠΠ°ΠΊΠΎΠ²Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠΊΡΠ°Π½Π°? ΠΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ X ΡΠ°ΡΡΡΠ½ΡΠ»ΡΡ Π½Π° Π²Π΅ΡΡ ΡΠΊΡΠ°Π½. */
CGRect screenBounds = [[UIScreen mainScreen] bounds];
/* ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π°. */
CGPathMoveToPoint(path,
NULL,
screenBounds.origin.x,
screenBounds.origin.y);
/* ΠΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠ½ΠΈΡ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ Π² Π½ΠΈΠΆΠ½ΠΈΠΉ ΠΏΡΠ°Π²ΡΠΉ ΡΠ³ΠΎΠ» ΡΠΊΡΠ°Π½Π°. */
CGPathAddLineToPoint(path,
NULL,
screenBounds.size.width,
screenBounds.size.height);
/* ΠΠ°ΡΠΈΠ½Π°Π΅ΠΌ Π΄ΡΡΠ³ΡΡ Π»ΠΈΠ½ΠΈΡ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π°. */
CGPathMoveToPoint(path,
NULL,
screenBounds.size.width,
screenBounds.origin.y);
/* ΠΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠ½ΠΈΡ ΠΈΠ· Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ Π² Π½ΠΈΠΆΠ½ΠΈΠΉ Π»Π΅Π²ΡΠΉ ΡΠ³ΠΎΠ». */
CGPathAddLineToPoint(path,
NULL,
screenBounds.origin.x,
screenBounds.size.height);
/* ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΏΡΡΡ. */
CGContextRef currentContext = UIGraphicsGetCurrentContext();
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·ΠΆΠ΅ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. */
CGContextAddPath(currentContext,
path);
/* ΠΠ°Π΄Π°Π΅ΠΌ Π΄Π»Ρ ΡΡΡΠΈΡ Π° Π³ΠΎΠ»ΡΠ±ΠΎΠΉ ΡΠ²Π΅Ρ. */
[[UIColor blueColor] setStroke];
/* ΠΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡ ΡΡΠΈΠΌ ΡΠ²Π΅ΡΠΎΠΌ. */
CGContextDrawPath(currentContext,
kCGPathStroke);
/* ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΡΠΈ. */
CGPathRelease(path);
}
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ NULL, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌ, ΠΊΠ°ΠΊ CGPathMoveToPoint, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ ΠΏΡΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΠΈΠ³ΡΡ ΠΈ Π»ΠΈΠ½ΠΈΠΉ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΠΏΡΡΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π°Ρ 17.11β17.13.
ΠΡΠ°ΠΊ, Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΏΡΡΡ (CGPathCreateMutable), Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠΎΡ ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ (CGContextAddPath) ΠΈ ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ (CGContextDrawPath). ΠΠ°ΠΏΡΡΡΠΈΠ² ΡΡΠΎΡ ΠΊΠΎΠ΄, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡ. 17.21.
Π ΠΈΡ. 17.21. Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΡΠ΅ΠΉ
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 17.6, 17.11β17.13.
17.8. ΠΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ²
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ CGPathAddRect Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΊ ΠΏΡΡΠΈ, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΠΉΡΠ΅ ΡΡΠΎΡ ΠΏΡΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ°ΠΊ ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»Π° 17.7, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΡΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ. ΠΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Core Graphics ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΡΡΡΠΌΠΈ, β CGPathAddRect. ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΈ ΠΏΡΡΠ΅ΠΉ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
β (void)drawRect:(CGRect)rect{
/* Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡ. ΠΡΠΎΡΡΠΎ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΡΠΈ. */
CGMutablePathRef path = CGPathCreateMutable();
/* ΠΡΠΎ Π³ΡΠ°Π½ΠΈΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. */
CGRect rectangle = CGRectMake(10.0f,
10.0f,
200.0f,
300.0f);
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΊ ΠΏΡΡΠΈ. */
CGPathAddRect(path,
NULL,
rectangle);
/* ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. */
CGContextRef currentContext = UIGraphicsGetCurrentContext();
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ. */
CGContextAddPath(currentContext,
path);
/* ΠΠ°Π΄Π°Π΅ΠΌ Π³ΠΎΠ»ΡΠ±ΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ²Π΅ΡΠ° Π·Π°Π»ΠΈΠ²ΠΊΠΈ. */
[[UIColor colorWithRed:0.20f
green:0.60f
blue:0.80f
alpha:1.0f] setFill];
/* ΠΠ°Π΄Π°Π΅ΠΌ Π΄Π»Ρ ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ ΠΊΠΎΡΠΈΡΠ½Π΅Π²ΡΠΉ ΡΠ²Π΅Ρ. */
[[UIColor brownColor] setStroke];
/* ΠΠ°Π΄Π°Π΅ΠΌ Π΄Π»Ρ ΡΠΈΡΠΈΠ½Ρ (ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 5. */
CGContextSetLineWidth(currentContext,
5.0f);
/* ΠΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊ Π½Π΅ΠΌΡ Π·Π°Π»ΠΈΠ²ΠΊΡ. */
CGContextDrawPath(currentContext,
kCGPathFillStroke);
/* ΠΠ·Π±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΎΡ ΠΏΡΡΠΈ. */
CGPathRelease(path);
}
ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π° ΠΏΡΡΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π³ΠΎΠ»ΡΠ±ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π° ΠΊΡΠ°Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΊΠΎΡΠΈΡΠ½Π΅Π²ΡΠΌ. ΠΠ° ΡΠΈΡ. 17.22 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, Π·Π°ΠΏΡΡΡΠΈΠ² ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΡΠ²Π΅ΡΠ° Π½Π° ΡΠ΅ΡΠ½ΠΎ-Π±Π΅Π»ΠΎΠΉ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ Π½Π΅ Π²ΠΈΠ΄Π½Ρ).
ΠΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ ΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ², ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² CGRect ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ CGPathAddRects. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
β (void)drawRect:(CGRect)rect{
/* Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡ. ΠΡΠΎΡΡΠΎ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΡΠΈ. */
CGMutablePathRef path = CGPathCreateMutable();
/* ΠΡΠΎ Π³ΡΠ°Π½ΠΈΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. */
CGRect rectangle1 = CGRectMake(10.0f,
10.0f,
Π ΠΈΡ. 17.22. ΠΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΡΠ΅ΠΉ
200.0f,
300.0f);
/* ΠΡΠΎ Π³ΡΠ°Π½ΠΈΡΡ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. */
CGRect rectangle2 = CGRectMake(40.0f,
100.0f,
90.0f,
300.0f);
/* ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΎΠ±Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π² ΠΌΠ°ΡΡΠΈΠ². */
CGRect rectangles[2] = {
rectangle1, rectangle2
};
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ ΠΊ ΠΏΡΡΠΈ. */
CGPathAddRects(path,
NULL,
(const CGRect *)&rectangles,
2);
/* ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. */
CGContextRef currentContext = UIGraphicsGetCurrentContext();
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ. */
CGContextAddPath(currentContext,
path);
/* ΠΠ°Π΄Π°Π΅ΠΌ Π³ΠΎΠ»ΡΠ±ΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ²Π΅ΡΠ° Π·Π°Π»ΠΈΠ²ΠΊΠΈ. */
[[UIColor colorWithRed:0.20f
green:0.60f
blue:0.80f
alpha:1.0f] setFill];
/* ΠΠ°Π΄Π°Π΅ΠΌ Π΄Π»Ρ ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ ΡΠ΅ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ. */
[[UIColor blackColor] setStroke];
/* ΠΠ°Π΄Π°Π΅ΠΌ Π΄Π»Ρ ΡΠΈΡΠΈΠ½Ρ (ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. 5 */
CGContextSetLineWidth(currentContext,
5.0f);
/* ΠΡΠΎΠ²ΠΎΠ΄ΠΈΠΌ ΠΏΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΊ Π½Π΅ΠΌΡ Π·Π°Π»ΠΈΠ²ΠΊΡ. */