β’ kCGGradientDrawsBeforeStartLocation β ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Π½Π° Π²ΡΠ΅ ΡΠΎΡΠΊΠΈ Π΄ΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°;
β’ 0 β Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ.
Π§ΡΠΎΠ±Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Π² ΠΎΠ±Π΅ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΎΠ±Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β Β«Π΄ΠΎΒ» ΠΈ Β«ΠΏΠΎΡΠ»Π΅Β», β Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΠΠ (ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ |). ΠΡΠΈΠΌΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π΄Π°Π»Π΅Π΅:
CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGPoint startPoint, endPoint;
startPoint = CGPointMake(0.0f,
screenBounds.size.height / 2.0f);
endPoint = CGPointMake(screenBounds.size.width,
startPoint.y);
CGContextDrawLinearGradient
(currentContext,
gradient,
startPoint,
endPoint,
0);
CGGradientRelease(gradient);
ΠΠΏΠΈΡΠ°ΡΠ΅Π»Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ Π² Π΄ΡΡΠ³ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΊΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ².
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ ΡΠΈΡ. 17.27. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Ρ ΡΠ°ΠΌΠΎΠΉ Π»Π΅Π²ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠΊΡΠ°Π½Π° ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π΄ΠΎ ΡΠ°ΠΌΠΎΠΉ ΠΏΡΠ°Π²ΠΎΠΉ, ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGContextDrawLinearGradient, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°. ΠΡΠΏΡΠ°Π²ΠΈΠΌ ΡΡΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ. ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡ. 17.28.
Π ΠΈΡ. 17.28. ΠΡΠ΅Π²ΠΎΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Ρ ΠΎΡΡΠ΅Π½ΠΊΠ°ΠΌΠΈ, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΠΈΠΌΠΈΡΡ Π·Π° Π΅Π³ΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΠΈ
ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅:
β (void)drawRect:(CGRect)rect{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGColorSpaceRef colorSpace =
CGColorSpaceCreateDeviceRGB();
UIColor *startColor = [UIColor orangeColor];
CGFloat *startColorComponents =
(CGFloat *)CGColorGetComponents([startColor CGColor]);
UIColor *endColor = [UIColor blueColor];
CGFloat *endColorComponents =
(CGFloat *)CGColorGetComponents([endColor CGColor]);
CGFloat colorComponents[8] = {
/* Π§Π΅ΡΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΎΡΠ°Π½ΠΆΠ΅Π²ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° (RGBA (RGBA) */
startColorComponents[0],
startColorComponents[1],
startColorComponents[2],
startColorComponents[3], /* ΠΠ΅ΡΠ²ΡΠΉ ΡΠ²Π΅Ρ = ΠΎΡΠ°Π½ΠΆΠ΅Π²ΡΠΉ */
/* Π§Π΅ΡΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π³ΠΎΠ»ΡΠ±ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° (RGBA) */
endColorComponents[0],
endColorComponents[1],
endColorComponents[2],
endColorComponents[3], /* ΠΡΠΎΡΠΎΠΉ ΡΠ²Π΅Ρ = Π³ΠΎΠ»ΡΠ±ΠΎΠΉ */
};
CGFloat colorIndices[2] = {
0.0f, /* Π¦Π²Π΅Ρ 0 Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ colorComponents */
1.0f, /* Π¦Π²Π΅Ρ 1 Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ colorComponents */
};
CGGradientRef gradient = CGGradientCreateWithColorComponents
(colorSpace,
(const CGFloat *)&colorComponents,
(const CGFloat *)&colorIndices,
2);
CGColorSpaceRelease(colorSpace);
CGPoint startPoint, endPoint;
startPoint = CGPointMake(120,
260);
endPoint = CGPointMake(200.0f,
220);
CGContextDrawLinearGradient (currentContext,
gradient,
startPoint,
endPoint,
kCGGradientDrawsBeforeStartLocation |
kCGGradientDrawsAfterEndLocation);
CGGradientRelease(gradient);
CGContextRestoreGState(currentContext);
}
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ kCGGradientDrawsBeforeStartLocation ΠΈ kCGGradientDrawsAfterEndLocation, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ CGContextDrawLinearGradient, ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ, ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡ. 17.28. ΠΠΎΡΡΠΎΠΌΡ ΡΠ±Π΅ΡΠ΅ΠΌ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°Π΄Π°Π΄ΠΈΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGContextDrawLinearGradient Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 β ΠΊΠ°ΠΊ ΠΈ ΡΠ°Π½ΡΡΠ΅. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΊΠ°ΠΊ Π½Π° ΡΠΈΡ. 17.29.
Π ΠΈΡ. 17.29. ΠΡΠ΅Π²ΠΎΠΉ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ Π±Π΅Π· ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ²
ΠΠ° ΡΠΈΡ. 17.28 ΠΈ 17.29 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΡ. ΠΠΎ Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π½Π° ΡΠΈΡ. 17.28 ΡΠ²Π΅ΡΠ° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΠΎΡΠ΅ΠΊ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΏΠΎ ΠΎΠ±Π΅ ΡΡΠΎΡΠΎΠ½Ρ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π½Π° Π²Π΅ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Π΅ΡΡ ΡΠΊΡΠ°Π½ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°ΠΊΡΠ°ΡΠ΅Π½.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π» 17.3.
17.11. ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠ³ΡΡ, Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π²ΡΠ΅, ΡΡΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π½Π° Π½ΠΎΠ²ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΡΠΎ Π±Π΅Π· ΡΡΡΠ΄Π° ΡΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CGAffineTransformMakeTranslation Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π°ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΄Π²ΠΈΠ³Π°.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
Π ΡΠ°Π·Π΄Π΅Π»Π΅ 17.8 Π±ΡΠ»ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡΡ . ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ, Π² ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ½ΠΊΠ°. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² Core Graphics β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΊ ΡΠΈΠ³ΡΡΠ°ΠΌ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΄Π²ΠΈΠ³Π° (Translation Transformation). Β«Π‘Π΄Π²ΠΈΠ³Π° ΡΠ΅Π³ΠΎ?Β» β ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΏΡΠΎΡΠΈΡΡ Π²Ρ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΄Π²ΠΈΠ³Π° β ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΌΠ΅ΡΡΠΈΡΡ ΡΠΈΠ³ΡΡΡ ΠΈΠ»ΠΈ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
Π‘ΡΠ΅Π΄ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·Π²Π°ΡΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 17.13) ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 17.12). ΠΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ Π°ΡΡΠΈΠ½Π½ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠΎΡΠΊΠ° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π° ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ Π² ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅, ΡΠ²Π»ΡΡΡΡΡ Π°ΡΡΠΈΠ½Π½ΡΠΌΠΈ.
Π Ρ ΠΎΠ΄Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΄Π²ΠΈΠ³Π° Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠ³ΡΡΡ Π½Π° ΠΏΡΡΠΈ ΠΈΠ»ΠΈ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΡΠΊΡ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ (10; 20), ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊ Π½Π΅ΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΄Π²ΠΈΠ³Π° (30; 40) ΠΈ ΡΠ½ΠΎΠ²Π° Π΅Π΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅, ΡΠΎΡΠΊΠ° ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ (40; 60), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ 40 = 10 + 30, Π° 60 = 20 + 40.
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΄Π²ΠΈΠ³Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ CGAffineTransformMakeTranslation, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°ΡΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° CGAffineTransform. ΠΠ²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ΄Π²ΠΈΠ³ ΠΏΠΎ ΠΎΡΡΠΌ X ΠΈ Y Π² ΡΠΎΡΠΊΠ°Ρ .
Π ΡΠ°Π·Π΄Π΅Π»Π΅ 17.8 ΠΌΡ ΠΈΠ·ΡΡΠΈΠ»ΠΈ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° CGPathAddRect ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΏΠ° CGAffineTransform. Π§ΡΠΎΠ±Ρ ΡΠΌΠ΅ΡΡΠΈΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Ρ Π΅Π³ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π½Π° Π΄ΡΡΠ³ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΡΡΠΈΠ½Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠ΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌ x ΠΈ y, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠΎΡΠΎΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGPathAddRect, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅:
β (void)drawRect:(CGRect)rect{
/* Π‘Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΡΡ. ΠΡΠΎΡΡΠΎ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΡΠΈ. */
CGMutablePathRef path = CGPathCreateMutable();
/* ΠΡΠΎ Π³ΡΠ°Π½ΠΈΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°. */
CGRect rectangle = CGRectMake(10.0f,
10.0f,
200.0f,
300.0f);
/* ΠΡ Ρ ΠΎΡΠΈΠΌ ΡΠΌΠ΅ΡΡΠΈΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π½Π° 100 ΡΠΎΡΠ΅ΠΊ Π²ΠΏΡΠ°Π²ΠΎ,
Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΏΡΠΈ ΡΡΠΎΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΎΡΠΈ Y. */
CGAffineTransform transform = CGAffineTransformMakeTranslation(100.0f,
0.0f);
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΠΊ ΠΏΡΡΠΈ. */
CGPathAddRect(path,
&transform,
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.30 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-Π²ΠΈΠ΄Π°.
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΡΠΈΡ. 17.30 ΠΈ 17.22. ΠΠΈΠ΄ΠΈΡΠ΅ ΡΠ°Π·Π½ΠΈΡΡ? ΠΡΠ΅ ΡΠ°Π· ΠΏΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΎΠ±Π΅ΠΈΡ ΡΠΈΠ³ΡΡ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΎΡΡΠΌ X ΠΈ Y, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ², Π² ΠΎΠ±ΠΎΠΈΡ Π±Π»ΠΎΠΊΠ°Ρ ΠΊΠΎΠ΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ. Π Π°Π·Π»ΠΈΡΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π° ΡΠΈΡ. 17.30 ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΡ Π°ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΊ ΠΏΡΡΠΈ.
ΠΡΠΎΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΡΠΈΠ³ΡΡΠ°ΠΌ, ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌΡΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΡΠ΅ΠΉ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ CGContextTranslateCTM. ΠΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ (Current Transformation Matrix, CTM). Π₯ΠΎΡΡ ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, ΠΏΠΎΠ½ΡΡΡ Π΅Π³ΠΎ ΡΠΌΡΡΠ» Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ΄Π°. Π‘ΡΠΈΡΠ°ΠΉΡΠ΅ CTM ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΌΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅Π½ΡΡΠ° Π²Π°ΡΠ΅Π³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΏΡΠΎΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΡΠΎΡΠΊΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΠΊΠ°Π·ΡΠ²Π°Π΅ΡΠ΅ Core Graphics ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΎΡΠΊΡ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ (0; 0), Core Graphics Π½Π°ΠΉΠ΄Π΅Ρ ΡΠ΅Π½ΡΡ ΡΠΊΡΠ°Π½Π°, ΠΏΠΎΠ»ΡΡΠΈΠ² ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΠ°ΡΠ΅ΠΌ CTM Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ΡΠΎΠΎΠ±ΡΠΈΡ Core Graphics, ΡΡΠΎ ΠΈΡΠΊΠΎΠΌΠ°Ρ ΡΠΎΡΠΊΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π° Π² Π²Π΅ΡΡ Π½Π΅ΠΌ Π»Π΅Π²ΠΎΠΌ ΡΠ³Π»Ρ ΡΠΊΡΠ°Π½Π°. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ, ΠΊΠ°ΠΊ CGContextTranslateCTM, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π²ΡΠ΅ ΡΠΈΠ³ΡΡΡ, ΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π·Π°Π½ΡΡΡ Π½Π° Ρ ΠΎΠ»ΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΠΌ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ°, ΠΊΠ°ΠΊ ΠΈ Π½Π° ΡΠΈΡ. 17.30, Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΄Π²ΠΈΠ³Π° Π½Π΅ ΠΊ ΡΠ°ΠΌΠΎΠΌΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΡ, Π° ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ: