рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдм рдкрд░ рдЖрдИрдУрдПрд╕ рдореЗрдВ рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдХреЛрдИ рд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореБрдЭреЗ рд░реВрд╕реА рдореЗрдВ рдРрд╕реЗ рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓реЗред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдРрдкреНрдкрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░, рдЖрдИрдУрдПрд╕ рдореЗрдВ 2 рдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдкреНрд░рд▓реЗрдЦрди рд╣реИ - рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд░реЗрдлрд░реЗрдВрд╕, рдЬрд┐рд╕рдореЗрдВ 400 рдкреЗрдЬ рдХреЗ рдкреНрд░рд▓реЗрдЦрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЖрдИрдУрдПрд╕ рдореЗрдВ 2 рдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдПрдХ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдкрд░рд┐рдЪрдп
рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдХреЛрдХреЛ рдЯрдЪ рдореЗрдВ рдПрдкрдХрд┐рдЯ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдИрдУрдПрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдРрдкрдХрд┐рдЯ рдХреЗ рдмрдЬрд╛рдп, 2 рдбреА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдПрд╕рдбреАрдХреЗ рдХрд╛ рднреА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред , рдЪреВрдВрдХрд┐ C рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ AppKit рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдЬрд┐рддрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд▓рдЪреАрд▓рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдХрд╕реНрдЯрдо рджреГрд╢реНрдп рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗред
рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рджреГрд╢реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдФрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдПрдХ Xcode рджреЗрдЦреЗрдВ-рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рдХрд╣реЗрдВред

Our рдЕрдЧрд▓рд╛, рд╣рдорд╛рд░рд╛ рджреГрд╢реНрдп (Cmd + N) рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ MyCanvas,

рдЬреЛ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп-рд╕реА рд╡рд░реНрдЧ рдФрд░ UIView рдХрд╛ рдПрдХ рдЙрдкрд╡рд░реНрдЧ рд╣реЛрдЧрд╛ред
рд╕рднреА "рдбреНрд░рд╛рдЗрдВрдЧ" рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реЛрддреА рд╣реИ:
- (void)drawRect:(CGRect)rect
{
//
}
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдо рдХрднреА рднреА рд╕реАрдзреЗ-рдЖрд╣рд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓реЗрддреЗ: рд╡рд┐рдзрд┐ред рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡реНрдпреВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдм рд╣рдореЗрдВ рдЗрд╕ рджреГрд╢реНрдп рдпрд╛ рдЗрд╕рдХреЗ рдХреБрдЫ рднрд╛рдЧ (рдЕрджреНрдпрддрди) рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдо UIVIV рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
-(void)setNeedsDisplay;
-(void)setNeedsDisplayInRect:(CGRect)aRect;
рдХреНрд░рдорд╢рдГред
рдбреНрд░рд╛рдЕрд░: рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ рдмрдирд╛рдПрдВред рд╕рднреА рдбреНрд░рд╛рдЗрдВрдЧ рдПрдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд╣рд╛рдВ рд╣реИред рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, UIGraphicsGetCurrentContext C рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдИрдУрдПрд╕ рдкрд░, рд╕рдВрджрд░реНрдн рдХрд╛ рдХреЗрдВрджреНрд░ рдЬрдм рдбреНрд░рд╛рдЗрдВрдЧ рдКрдкрд░реА рдмрд╛рдИрдВ рдУрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдирд┐рдЪрд▓реЗ рдУрдПрд╕ рдореЗрдВ рдирд╣реАрдВ, рдЬреИрд╕реЗ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ред
- (void)drawRect:(CGRect)rect
{
// context
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect); // context
CGContextSetRGBFillColor(context, 255, 0, 0, 1);
CGContextFillRect(context, CGRectMake(20, 20, 100, 100));
}
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреНрд░рд╛рдЗрдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЧреНрд░рд╛рдлрд┐рдХ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рдж рджреГрд╢реНрдп рдХрд╛рд▓рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
CGContextSetRGBFillColor рдлрд╝рдВрдХреНрд╢рди рдЗрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рднрд░рддрд╛ рд╣реИ, рдФрд░ CGContextFillRect рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡рд░реНрдЧ рдЦреАрдВрдЪрддрд╛ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ (Cmd + R) рдореЗрдВ рдЪрд▓рд╛рдПрдВ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдирд╛ рд╡реНрдпреВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕реЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ред
рд╡реНрдпреВ рдмрдирд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрд╕реНрдЯрдо рд╡реНрдпреВ - рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдФрд░ рд╕реАрдзреЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред IB рдХреЗ рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдЦреАрдВрдЪреЗрдВ рдФрд░ рдбреНрд░реЙрдк рджреНрд╡рд╛рд░рд╛ UIView рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ рдХрд╕реНрдЯрдо рд╡рд░реНрдЧ: MyView рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
рд╣рдорд╛рд░реЗ рджреГрд╢реНрдп рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ GraphicsViewController.m рдореЗрдВ рдмрдирд╛рдПрдВ:
- (void)viewDidLoad
{
[super viewDidLoad];
MyCanvas *myView = [[MyCanvas alloc] initWithFrame:self.view.bounds];
[self.view addSubview:myView];
}
AddSubview: рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рджреГрд╢реНрдп рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдирд┐рд╖реНрдХрд╛рд╕рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рджреГрд╢реНрдп, рдЬрд┐рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА; рдпрд╣рд╛рдВ рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рд╣рдо рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╢реАрд░реНрд╖ рджреГрд╢реНрдп рд╕реЗ рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХреЗ рд╕рднреА рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рднреА рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЙрдирдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм, рдпрджрд┐ рд╣рдо рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ 20 рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд▓рд╛рд▓ рд╡рд░реНрдЧ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЕрдВрдХ (рдкреАрдЯреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдкрд┐рдХреНрд╕рд▓ (рдкреАрдПрдХреНрд╕) рдХрд╛, рддрд╛рдХрд┐ рд░реЗрдЯрд┐рдирд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░ рд╕рдорд╛рди рд╣реЛрдВред рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реАрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, @property CGFloat contentScaleFactor рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдЬреЛ "рд╕реНрдХреЗрд▓" (рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдП рдЧрдП рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рдореЗрдВ рдХрд┐рддрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓) рджреЗрддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп 2.0 рдпрд╛ рд░реЗрдЯрд┐рдирд╛ рдХреЗ рд▓рд┐рдП 1.0 рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдиреНрдп рдЖрджрд┐рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
1) рдПрдХ рдмреНрд▓реВ рдлрд┐рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрдХреНрд░ CGContextFillEllipseInRect рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЖрдпрдд рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рджреАрд░реНрдШрд╡реГрддреНрдд рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
CGContextSetRGBFillColor(context, 0, 0, 255, 1);
CGContextFillEllipseInRect(context, CGRectMake(30, 140, 80, 80));
2) рд╣рд░реЗ рд░рдВрдЧ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рдФрд░ 3 рдХреА рдПрдХ рд▓рд╛рдЗрди рдореЛрдЯрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рднрд░рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЪрдХреНрд░, CGContextSetLineWidth рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрди рдХреА рдореЛрдЯрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдмрд┐рдирд╛ рднрд░рд╛рд╡ рдХреЗ рдПрдХ рдЪрдХреНрд░ CGContextStateEllipseInRect рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
CGContextSetRGBStrokeColor(context, 0, 255, 0, 1);
CGContextSetLineWidth(context, 3.0);
CGRect circleRect = CGRectMake(140, 20, 100, 100);
CGContextStrokeEllipseInRect(context, circleRect);
3) рдПрдХ рд▓рд╛рд▓ рд╡рд░реНрдЧ рдореЗрдВ рдЙрддреНрдХреАрд░реНрдг рдПрдХ рддреНрд░рд┐рднреБрдЬ рд╕рд░рдгреА рд╕реЗ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИред
CGContextSetRGBStrokeColor(context, 255, 0, 255, 1);
CGPoint points[6] = {CGPointMake(70, 20), CGPointMake(120, 120),
CGPointMake(120, 120), CGPointMake(20, 120),
CGPointMake(20, 120), CGPointMake(70, 20)};
CGContextStrokeLineSegments(context, points, 6);
4) рдмреЗрдЬрд╝рд┐рдпрд░ рддрдЦрд╝реНрддрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рднреА рд╣реИрдВ рдЬреЛ рд╡рдХреНрд░рддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмреЗрдЬрд╝рд┐рдпрд░ рдХрд░реНрд╡реНрд╕ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреНрд░реИрд╢ рдХреЛрд░реНрд╕:

рдЕрдВрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ CGPoints рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рднреНрд░рдорд┐рдд рди рд╣реЛрдВ:
CGPoint bezierStart = {20, 260};
CGPoint bezierEnd = {300, 260};
CGPoint bezierHelper1 = {80, 320};
CGPoint bezierHelper2 = {240, 320};
CGContextBeginPath(context);
CGContextMoveToPoint(context, bezierStart.x, bezierStart.y);
CGContextAddCurveToPoint(context,
bezierHelper1.x, bezierHelper1.y,
bezierHelper2.x, bezierHelper2.y,
bezierEnd.x, bezierEnd.y);
CGContextStrokePath(context);
рдЖрдЗрдП рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрддреНрд╡ рдмрдирд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдЗрдирд╕реЙрдЗрдб:
CGContextSetRGBStrokeColor(context, 255, 255, 255, 1);
int y;
for(int x=rect.origin.x; x < rect.size.width; x++)
{
y = ((rect.size.height/6) * sin(((x*4) % 360) * M_PI/180)) + 380;
if (x == 0) CGContextMoveToPoint(context, x, y);
else CGContextAddLineToPoint(context, x, y);
}
CGContextStrokePath(context);
5 рд╡реАрдВ рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдордиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 380 рдЕрдВрдХ рдЬреЛрдбрд╝реЗред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ iPhone рдХреА рд╕реНрдХреНрд░реАрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдкрд╛рда рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ UILabel рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬрд┐рд╕рдореЗрдВ рдкрд╛рда рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реИрдВ, рдЬрдм рдЖрдкрдХреЛ рдЗрди-рд░реЗрдХреНрдЯрдХреНрдЯ рдкрджреНрдзрддрд┐ рдореЗрдВ рдкрд╛рда рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдкрд╛рда рдХреЛ рдШреБрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдбреНрд░рд╛рдЗрдВрдЧ:
char *txt = "My CG text"; // ,
CGContextSelectFont(context, "Helvetica", 18.0, kCGEncodingMacRoman); //
CGContextSetTextDrawingMode(context, kCGTextFill); // : kCGTextFill () kCGTextStroke ()
CGContextShowTextAtPoint(context, 20, 280, txt, strlen(txt)); //
рдЖрдк рдлрд╝реЙрдиреНрдЯ, рдЖрдХрд╛рд░, рдкреНрд░рджрд░реНрд╢рди рд╢реИрд▓реА, рдореАрдЯреНрд░рд┐рдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UIFont рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ [UIFont рдкрд░рд┐рд╡рд╛рд░рдирд╛рдо] рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЙрдкрд▓рдмреНрдз рдлреЛрдВрдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рд╣рдо UILabel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рд╕рдордп рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рдирд╣реАрдВ, рддреЛ рд╣рдорд╛рд░реЗ GraphicsViewController.m рдкрд░ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
UILabel *scaleNumber = [[UILabel alloc] initWithFrame:CGRectMake(160, 140, 140, 21)]; // , View
scaleNumber.textColor = [UIColor yellowColor]; //
scaleNumber.backgroundColor = [UIColor colorWithWhite:0 alpha:0]; // , ( )
scaleNumber.text = @"Vitaly Ishkulov"; //-
scaleNumber.adjustsFontSizeToFitWidth = YES; // , , , ( , )
[myView addSubview:scaleNumber]; // View
[scaleNumber release]; // , / myView
рдирд┐рд╖реНрдХрд░реНрд╖ рдФрд░ рд╕реНрдореГрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж
рд╕реНрдореГрддрд┐ рд╕реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, [myView рд░рд┐рд▓реАрдЬрд╝] рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд░рд┐рд▓реАрдЬрд╝рдСрдЙрдЯрд▓реЗрдЯ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ:
- (void)releaseOutlets {
self.myView = nil;
}
рдФрд░ рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ viewDidUnload рдФрд░ dealloc рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ:
- (void)viewDidUnload
{
[super viewDidUnload];
[self releaseOutlets];
// Release any retained subviews of the main view.
// eg self.myOutlet = nil;
}
- (void)dealloc
{
[self releaseOutlets];
[super dealloc];
}
рдереЛрдбрд╝реА рдЕрдЬреАрдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ self.myView = nil; рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрджрд┐ рдЖрдк рд╕реЗрдЯрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП myView рдХрдорд╛рдВрдб рдХреЛ
рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
- (void)setMyView:(MyCanvas *)anObject
{
if (anObject != myView) {
[myView release];
myView = [anObject retain];
}
}
рдпрджрд┐ anObject = nil рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ myView nil рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдореЗрдВ рдЕрдВрддрд┐рдо рд▓рд╛рдЗрди рд╕реЗрдЯ рдХрд░рддреА рд╣реИ, рдФрд░ рдкрд┐рдЫрд▓рд╛ рд╡рд╛рд▓рд╛ рд╡рд░реНрддрдорд╛рди рджреГрд╢реНрдп рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╣рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред
рдпрд╣ рдХреЛрд░рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд░рд┐рдЪрдп рдмрддрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдЖрдЧреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ:
IOS рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВрдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдВрджрд░реНрдн