Π ΠΈΡ. 17.30. ΠΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Ρ Π°ΡΡΠΈΠ½Π½ΡΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΄Π²ΠΈΠ³Π°
β (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();
/* Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·ΠΆΠ΅
ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. */
CGContextSaveGState(currentContext);
/* Π‘Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΡΠ΅ΠΊΡΡΡΡ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ
Π½Π° 100 ΡΠΎΡΠ΅ΠΊ Π²ΠΏΡΠ°Π²ΠΎ. */
CGContextTranslateCTM(currentContext,
100.0f,
0.0f);
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ. */
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);
/* ΠΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. */
CGContextRestoreGState(currentContext);
}
ΠΠ°ΠΏΡΡΡΠΈΠ² ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠ°ΠΊ ΠΈ Π½Π° ΡΠΈΡ. 17.30.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 17.8, 17.12 ΠΈ 17.13.
17.12. ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠ³ΡΡ, Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³ΡΡΡ, ΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π² ΡΡΠΎΡΠΎΠ½Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π°ΡΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π°, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CGAffineTransformMakeScale.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π ΡΠ°Π·Π΄Π΅Π»Π΅ 17.11 Π±ΡΠ»ΠΎ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ ΠΊ ΡΠΈΠ³ΡΡΠ°ΠΌ ΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°ΠΌ. ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, β ΡΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Core Graphics ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΡΡΠ³, Π½Π° 100 % ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΅Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°.
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΡΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π°, ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CGAffineTransformMakeScale, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ° CGAffineTransform. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGContextScaleCTM, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅Ρ CTM. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ CTM (ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ) ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 17.11.
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°: ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ X ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΡΠΈ Y. ΠΡΠ΅ ΡΠ°Π· ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΡ Ρ ΡΠΈΡ. 17.22. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π»ΠΈΠ½Π° ΠΈ ΡΠΈΡΠΈΠ½Π° ΡΠΌΠ΅Π½ΡΡΠΈΠ»ΠΈΡΡ Π²ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ ΠΎΡΠΈ X ΠΈ Y Π½Π° 0,5 (Π²ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π·Π΄Π΅ΡΡ:
/* ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΡΠΌΠ΅Π½ΡΡΠ°Ρ Π΅Π³ΠΎ Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ. */
CGAffineTransform transform =
CGAffineTransformMakeScale(0.5f, 0.5f);
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΊ ΠΏΡΡΠΈ. */
CGPathAddRect(path,
&transform,
rectangle);
ΠΠ° ΡΠΈΡ. 17.31 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π° ΠΊ ΠΊΠΎΠ΄Ρ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 17.8.
Π ΠΈΡ. 17.31. ΠΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ CGAffineTransformMakeScale ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGContextScaleCTM, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΡΠ°Π±Π° ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π΄Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡ, ΡΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ (Π²Π½ΠΎΠ²Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΈΡ. 17.31):
β (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();
/* ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ ΡΠΈΠ³ΡΡΡ, ΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅,
ΡΠΌΠ΅Π½ΡΡΠ°Ρ ΠΈΡ Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ. */
CGContextScaleCTM(currentContext,
0.5f,
0.5f);
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ. */
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.11.
17.13. ΠΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠ³ΡΡ, Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, ΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠ΄ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CGAffineTransformMakeRotation Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΈΡΡΡΠΏΠ°ΡΡ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠΈΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ, Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π°ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ°ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΈΠ· ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² 17.11 ΠΈ 17.12. Π§ΡΠΎΠ±Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΡΠ΅ΠΊΡΡ, Ρ ΡΡΠ°ΡΠ°Π»ΡΡ Π½Π΅ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», ΡΠΆΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ .
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡΠ΄Π²ΠΈΠ³Π΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠΈΠ³ΡΡΠ°ΠΌ, ΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π° ΠΏΡΡΡΡ ΠΈ ΠΏΡΡΠΌΠΎ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅. ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ CGAffineTransformMakeRotation ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π² ΡΠ°Π΄ΠΈΠ°Π½Π°Ρ , Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° CGAffineTransform. ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊ ΠΏΡΡΡΠΌ ΠΈ ΡΠΈΠ³ΡΡΠ°ΠΌ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΠ³ΠΎΠ», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGContextRotateCTM.
ΠΠΎΠ²Π΅ΡΠ½Π΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π½ΡΠΉ Π½Π° ΡΠΈΡ. 17.22, Π½Π° 45Β° ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅ (ΡΠΈΡ. 17.32). ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΎ Π² ΡΠ°Π΄ΠΈΠ°Π½Π°Ρ . ΠΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π°ΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅, Π° ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ β ΠΏΡΠΎΡΠΈΠ² ΡΠ°ΡΠΎΠ²ΠΎΠΉ:
/* ΠΡΠ°ΡΠ°Π΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π½Π° 45Β° ΠΏΠΎ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠ΅. */
CGAffineTransform transform =
CGAffineTransformMakeRotation((45.0f * M_PI) / 180.0f);
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΊ ΠΏΡΡΠΈ. */
CGPathAddRect(path,
&transform,
rectangle);
Π ΠΈΡ. 17.32. ΠΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 17.12, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGContextRotateCTM.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 17.11 ΠΈ 17.12.
17.14. ΠΠ½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΎΠ²
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΎΠ².
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° UIView.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ iOS ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, ΡΡΠ΅Π΄ΠΈ ΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π΅ΡΡΡ ΠΊΠ°ΠΊ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅, ΡΠ°ΠΊ ΠΈ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅. Π‘Π°ΠΌΡΠΉ Π²ΡΡΠΎΠΊΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΡΠ°Π±ΠΎΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ΅ UIKit, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. Π UIKit ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Core Animation, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ Π½Π°ΠΌ Π² ΡΠΎΡΠΌΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ API, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π Π°Π±ΠΎΡΠ° Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠ΅ΠΉ Π² UIKit Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ° beginAnimations: context:, ΠΎΡΠ½ΠΎΡΡΡΠ΅Π³ΠΎΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ UIView. ΠΠ΅ΡΠ²ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β ΡΡΠΎ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΈ, Π° Π²ΡΠΎΡΠΎΠΉ β ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ·ΠΆΠ΅ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ Π΄Π΅Π»Π΅Π³Π°ΡΠΎΠ². ΠΡΠΊΠΎΡΠ΅ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Π½ΠΈΡ ΠΎΠ±ΠΎΠΈΡ .