рд╢рд╛рдпрдж рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХреА рдХреБрдЫ рд▓рд╛рдЗрдиреЗрдВ рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рджреГрд╢реНрдп рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред UIKit рдлреНрд░реЗрдорд╡рд░реНрдХ, рдЬреЛ рдорд╛рдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрд╛рдлреА рдкрд░рд┐рд╖реНрдХреГрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ, рдкреГрд╖реНрда рдХреЛ рдореЛрдбрд╝рдиреЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рддрдХред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рдХреЗ рд╕рд╛рде UIView рдХреЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдиреАрдЪреЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рд╕реНрддрд░ рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдпрд╣ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдЕрдХреНрд╕рд░ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИред рдореБрдЭреЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрдм рдмрдЪреНрдЪреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдХрд┐рддрд╛рдм рдХрд╛ рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ред
рдПрдиреАрдореЗрд╢рди рдЗрдВрдЬрди
рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рдХреЗ рд╕рд╛рде рдЖрдВрджреЛрд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЖрдХреГрддрд┐рдпреЛрдВ (рд╕реАрдзреА рд░реЗрдЦрд╛рдУрдВ, рд╡рдХреНрд░реЛрдВ, рд╡реГрддреНрддреЛрдВ рдЖрджрд┐) рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, CGPath рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдВрдХрдбрд╝рд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
- рдПрдХ CAKeyframeAnimation рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ - рдЕрд╡рдзрд┐, рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди, рд╕рдордп рдСрдлрд╕реЗрдЯ, рдЖрджрд┐ред рдкрд╣рд▓реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд░рд╛рд╕реНрддрд╛ рднреА рдЗрд╕ рд╡рд╕реНрддреБ рд╕реЗ "рдЯрдХрд░рд╛рддрд╛" рд╣реИред
- CGLayer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░рд┐рдгрд╛рдореА рдПрдиреАрдореЗрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рджреА рдЧрдИ рд╣реИред
рдПрдХ рдкрде рдХрд╛ рдирд┐рд░реНрдорд╛рдг
рдкрде рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ: рд╕реНрдерд┐рд░ CGPathRef рдФрд░ mutable CGMutablePathRefред рдкрд╣рд▓реЗ рдПрдХ рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, CGPathCreateWithEllipseInRect (CGRect rect, const CGAffineTransform * рдЯреНрд░рд╛рдВрд╕реНрдлрд╝реЙрд░реНрдо) рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдПрдХ рдЖрдпрдд рдореЗрдВ рдЙрддреНрдХреАрд░реНрдг рдПрдХ рджреАрд░реНрдШрд╡реГрддреНрдд рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рдкрд░ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕реБрдкрд░рдкреЛрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдФрд░ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдХ рдЦрд╛рдореА рд╣реИ - рдЗрд╕ рддрд░рд╣ рдХреА рд░рд╛рд╣ рдХреА рд╢реБрд░реБрдЖрдд рдкрд╣рд▓реА рдФрд░ рдЪреМрдереА рддрд┐рдорд╛рд╣реА рдХреЗ рдмреАрдЪ 0 (360) рдбрд┐рдЧреНрд░реА рдкрд░ рд╣реЛрдЧреА рдФрд░ рдПрдХ рдШрдВрдЯреЗ рдХреА рджрд┐рд╢рд╛ рд╣реЛрдЧреАред рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ рдкрд░рд┐рдгрд╛рдореА рдорд╛рд░реНрдЧ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдиреАрдореЗрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ - рд╢реБрд░реБрдЖрдд рдФрд░ рджрд┐рд╢рд╛ рдорд╛рдорд▓рд╛ред
рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рд░реНрдЧ, CGMutablePathRef рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЦрд╛рд▓реА рдпрд╛ рдкреВрд░рдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдкрде рдХреА рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдХрд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдордирдорд╛рдирд╛ рдмрд┐рдВрджреБ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдПрдХ рд╕рд░реНрдХрд▓ рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
CGPoint center = CGPointMake(200.0, 200.0); CGFloat radius = 100.0; CGMutablePathRef path = CGPathCreateMutable(); CGPathAddArc(path, NULL, center.x, center.y, radius, M_PI, 0, NO);
- CGPathAddArc рдлрд╝рдВрдХреНрд╢рди рдкрде рдореЗрдВ рдПрдХ рдЪрд╛рдк рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- рдкрд░рд╕реНрдкрд░ рдкрде
- рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕
- рдПрдХреНрд╕ рд╕рд░реНрдХрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдХрд╛ рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИ
- рдЪрдХреНрд░ рдХреЗ рдХреЗрдВрджреНрд░ рдХрд╛ рд╕рдордиреНрд╡рдп
- рдЪрд╛рдк рддреНрд░рд┐рдЬреНрдпрд╛
- рдПрдХреНрд╕ рдЕрдХреНрд╖ рд╕реЗ рдЪрд╛рдк рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд░реЗрдбрд┐рдпрди рдореЗрдВ рдХреЛрдг
- рдЪрд╛рдк рдХреЗ рдЕрдВрдд рддрдХ рдХреЛрдг
- рджрд┐рд╢рд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд╛рдорд╛рд╡рд░реНрдд
- рдмрдирд╛рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░, рдпрд╛рдж рд░рдЦреЗрдВ: рд░рд┐рд╕рд╛рд╡ рдЦрд░рд╛рдм рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛, рдРрдкреНрдкрд▓ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реЛрдЧрд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░реЗрд╢рд╛рди рд╣реЛрдЧрд╛ред
CGPathAddArc рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдорд╛рди рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдХреЛ рджреЗрдЦреЗрдВ:
рдФрд░ - рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕рд░реНрдХрд▓ рдХрд╛ рдХреЗрдВрджреНрд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░рд╛ рдЪрд╛рдк рдЭреВрда рд╣реЛрдЧрд╛ред рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ 3 рдФрд░ 4 рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдмреА - рдЪрд╛рдк рдХреА рд╢реБрд░реБрдЖрдд, рдХреЛрдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд, рдкреИрд░рд╛рдореАрдЯрд░ 6ред
рдмреА рдЪрд╛рдк рдХрд╛ рдЕрдВрдд рд╣реИ, рдЗрд╕реА рддрд░рд╣, рдкреИрд░рд╛рдореАрдЯрд░ 7ред
рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ
рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; pathAnimation.path = path; pathAnimation.duration = 2.0f; [view.layer addAnimation:pathAnimation forKey:nil];
рд╣рдо CAKeyframeAnimation рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдЧреБрдг рдХреЛ рдХреБрдВрдЬреА-рдорд╛рди рдкрде рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЪреЗрддрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ "рд╕реНрдерд┐рддрд┐" рд╣реИред
рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП CGPathRef рдореЗрдВ рдПрдирд┐рдореЗрд╢рди рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред
рдПрдиреАрдореЗрд╢рди рдХреА рдЕрд╡рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
рд╣рдо UIView рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ CGLayer рдХреЛ рдвреВрдВрдвреЗрдВ рдФрд░ рдПрдиреАрдореЗрд╢рди рдХреЛ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВред
рд╕рдм рдХреБрдЫ, рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдиреАрдореЗрд╢рди рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╢реВрдиреНрдп рд╣реИ рдФрд░ рд╣рдорд╛рд░рд╛ рдПрдиреАрдореЗрд╢рди рдЕрдирд╛рдо рд░рд╣реЗрдЧрд╛ред рдЙрд╕рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИред UIView рдХреЗ рд╕рд╛рде рдкрде рдХреА рд╢реБрд░реБрдЖрдд рдХреИрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ? рдЖрдЦрд┐рд░рдХрд╛рд░, рдЕрдЧрд░ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдиреАрдореЗрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рддрд╕реНрд╡реАрд░ рдмрд╕ рдкрд╣рд▓реЗ рдЪрд╛рдк рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреВрдж рдЬрд╛рдПрдЧреАред рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ - рдЬреЛ рд╣рдо рдЖрдЧреЗ рдХрд░реЗрдВрдЧреЗред
рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рддрдХ
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдФрд░ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдмрд╛рдК рдФрд░ рдЕрдирд╛рдбрд╝реА рд╣реИред рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдордЬрд╝реЗрджрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЪрд┐рддреНрд░ рдПрдХ рдЖрд░реНрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд┐рдВрджреБ рддрдХ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд╛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣реИ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рд┐рдВрдЧрд▓ рд╡реНрдпреВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХреНрд╡рд╛рд░реНрдЯреНрдЬрдХреЛрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬреЛрдбрд╝реЗрдВред рдлрд┐рд░ ViewController рдХрд╛ рд╢реАрд░реНрд╖рдХ рдмрджрд▓реЗрдВ:
@class PathDrawingView; // 1 @interface CMViewController : UIViewController { UIImageView *_image;
- рд╣рдо рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрде рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред рдпрд╣ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
- рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддрд╕реНрд╡реАрд░ рдЬрд┐рд╕реЗ рд╣рдо рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
- рдлреНрд▓реИрдЧ рдкреНрд▓реЗ рдПрдиреАрдореЗрд╢рдиред
- рдкрде рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ, рдЕрдЧрд░ рд╣рдо рдЕрдЪрд╛рдирдХ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рддрд╕реНрд╡реАрд░ рдХреИрд╕реЗ рдЪрд▓реЗрдЧреАред
- рд╕рд╣рд╛рдпрдХ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдореЗрдВ рдХрдИ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рд▓реЛрдкрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдПред рдФрд░ рд╢реБрд░реВ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рдПрдХ рдирд┐рд░рдВрддрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ:
#import <QuartzCore/QuartzCore.h> #import "PathDrawingView.h" static NSString *cAnimationKey = @"pathAnimation";
рдкрд╣рд▓реА рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рд╣реИред рдПрдирд┐рдореЗрд╢рди рдирд╛рдордХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред
рдЕрдм рджреГрд╢реНрдпрджрд░реНрд╢реА рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВ:
- (void) viewDidLoad { [super viewDidLoad]; _drawPath = NO; _isAnimating = NO; _image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]]; _image.center = CGPointMake(160, 240); [self.view addSubview:_image]; }
рдЭрдВрдбреЗ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рд░рд╛рд╕реНрддрд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ _drawPath рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ _isAimimating рдЕрднреА рддрдХ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ - рдПрдиреАрдореЗрд╢рди рдЕрднреА рддрдХ рдирд╣реАрдВ рдЦреЗрд▓ рд░рд╣рд╛ рд╣реИред рдЕрдЧрд▓рд╛, рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рджрд┐рдЦрд╛рдПрдВред
рдкрде рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕реЗ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рд╕реЗ рдЪреБрдиреЗрдВ:
- (CGPathRef) pathToPoint:(CGPoint) point { CGPoint imagePos = _image.center; CGFloat xDist = (point.x - imagePos.x); CGFloat yDist = (point.y - imagePos.y); CGFloat radius = sqrt((xDist * xDist) + (yDist * yDist)) / 2;
рдЧрдВрддрд╡реНрдп рдмрд┐рдВрджреБ (рдмрд╛рдж рдореЗрдВ рдЯреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рд╡рд┐рдзрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ 4 рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдкрд╛рдЗрдерд╛рдЧреЛрд░рд╕ рдкреНрд░рдореЗрдп рджреНрд╡рд╛рд░рд╛, рд╣рдо рдЪрд┐рддреНрд░ рдФрд░ рдЯреАред рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рджреЛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд╛рдк рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рд╢реБрд░реБрдЖрдд рдЪрд┐рддреНрд░ рдореЗрдВ рд╣реЛрдЧреА, рдФрд░ рдЕрдВрдд - рд╡рд╛рдВрдЫрд┐рдд рдмрд┐рдВрджреБ рдкрд░ред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рдЪрд┐рддреНрд░ рдФрд░ T рдХрд╛ рдХреЗрдВрджреНрд░ Y рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рд╣реА рд░реЗрдЦрд╛ рдкрд░ рд╣реИред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рд╡реГрддреНрдд рдХреЗ рдХреЗрдВрджреНрд░ рдХреЛ X рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рддреНрд░рд┐рдЬреНрдпрд╛ рдХреА рджреВрд░реА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рд╣рдо рдореВрд▓ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЪрд┐рддреНрд░ рдХреЗ рдХреЗрдВрджреНрд░ рдФрд░ рдЯреА рдХреЗ рдмреАрдЪ рдХреЛрдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯреА рд╕реЗ рдЪрд┐рддреНрд░ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдкрд╛рдП рдЧрдП рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
- "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЛрдЯреЗрд╢рди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдПрдВред
- рдПрдХ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рдПрдБред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪрд╛рдк рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЪрд┐рддреНрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрд┐рдВрджреБ рдкрд░ рд░реБрдХ рдЬрд╛рдП, рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рди рдЬрд╛рдП рдФрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПред
рдЪрд▓рд┐рдП рдПрдиреАрдореЗрд╢рди рдкрд░ рд╣реА рдЪрд▓рддреЗ рд╣реИрдВ:
- (void) followThePath:(CGPathRef) path { CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; pathAnimation.path = path; pathAnimation.removedOnCompletion = NO;
рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ?
- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рдкрдврд╝ рд╕рдХреЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ рдпрд╣ рдмрд╛рдж рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред
- рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ (рдпрд╛рдиреА рд╣рдо рдЬрд┐рд╕ рддрд╕реНрд╡реАрд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд░рд╣реЗ рд╣реИрдВ) рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдПрдиреАрдореЗрд╢рди рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдпрджрд┐ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддрд╕реНрд╡реАрд░ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЬрд╛рдПрдЧреА рдЬрд╣рд╛рдВ рдЖрдВрджреЛрд▓рди рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ред
- рдПрдиреАрдореЗрд╢рди рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдлреНрд░реЗрдо рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдФрд░ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ!) рдХрд┐рд╕реА рднреА рд╕рдордп рдПрдиреАрдореЗрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдРрд╕реЗ рджреГрд╢реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рддрд╕реНрд╡реАрд░ рдХреВрдж рдЬрд╛рдПрдЧреА, рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд░реБрдХреЗрдЧреАред
- рд╣рдо рдЗрд╕рдХреЗ рдЕрдВрдд рдХреЗ рдХреНрд╖рдг рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреАрдореЗрд╢рди рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрдж рдХреЛ рдирд╛рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рд╣рдо рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░, рдЙрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрдВред
рдЕрдм рд╣рдореЗрдВ рдПрдиреАрдореЗрд╢рди рдХреЗ рдЕрдВрдд рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- (void) stop { CALayer *pLayer = _image.layer.presentationLayer;
- рд╣рдо рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░рдд рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ рдХрд┐ рдПрдиреАрдореЗрд╢рди рдХрддрд╛рдИ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рджреМрд░рд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрджреНрдпрддрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╣реИ - рдпрд╣ рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдврд╛рдВрдЪреЗ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЪрд┐рддреНрд░ рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рдХреВрдж рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ред
- рд╣рдо рдЕрдкрдирд╛ рдПрдиреАрдореЗрд╢рди рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВред
рдПрдХ рдПрдиреАрдореЗрд╢рди рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
- (void) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { if (flag) [self stop]; }
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдпрджрд┐ рдПрдиреАрдореЗрд╢рди рд╕реНрд╡рдпрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛, рддреЛ рд╣рдо рдЗрд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдордЬрдмреВрд░ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рджреВрд╕рд░реА рдЬрдЧрд╣ рдкрд░ рд░реЛрдХ рджреЗрдВрдЧреЗред рдпрд╣рд╛рдБ, рдЯрдЪ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { if (_isAnimating) [self stop]; _isAnimating = YES; UITouch *touch = [touches anyObject]; CGPoint touchPoint = [touch locationInView:self.view]; CGPathRef path = [self pathToPoint:touchPoint]; [self followThePath:path]; if (_drawPath) [self drawPath:path]; CGPathRelease(path); }
рдпрд╣рд╛рдВ рд╣рдо рдмрд╕ рдкрд╣рд▓реЗ рд▓рд┐рдЦреА рдЧрдИ рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдмрдирд╛рдП рдЧрдП рдорд╛рд░реНрдЧ рдХреЛ рдореБрдХреНрдд рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдорд╛рд░реНрдЧ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:
- (void) drawPath:(CGPathRef) path { [self.pathView removeFromSuperview];
- рд╣рдо рд╕реНрдХреНрд░реАрди рд╕реЗ рдкрд┐рдЫрд▓реЗ рд░рд╛рд╕реНрддреЗ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рджрд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛
- рдкрде рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВред рдЗрд╕рдХрд╛ рдХреЛрдб рдиреАрдЪреЗ рд╣реЛрдЧрд╛ред
рдЕрдВрдд рдореЗрдВ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░реЗрдВ:
- (void) viewDidUnload { [_image release]; self.pathView = nil; }
рдмрд╕, рдЕрдм рдЖрдк рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрд╡реЗрджрди
PathDrawingView.h #import <UIKit/UIKit.h> @interface PathDrawingView : UIView { CGPathRef _path; } @property (retain, nonatomic) UIColor *strokeColor; @property (retain, nonatomic) UIColor *fillColor; @property (assign, nonatomic) CGPathRef path; @end
PathDrawingView.m #import "PathDrawingView.h" #import <QuartzCore/QuartzCore.h> @implementation PathDrawingView @synthesize strokeColor, fillColor; - (CGPathRef) path { return _path; } - (void) setPath:(CGPathRef)path { CGPathRelease(_path); _path = CGPathRetain(path); } - (void)drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGContextSetStrokeColorWithColor(ctx, strokeColor.CGColor); CGContextSetFillColorWithColor(ctx, fillColor.CGColor); CGContextAddPath(ctx, _path); CGContextStrokePath(ctx); } - (id) init { if (self = [super init]) { self.fillColor = [UIColor clearColor]; self.strokeColor = [UIColor redColor]; self.backgroundColor = [UIColor clearColor]; } return self; } - (void) dealloc { self.fillColor = nil; self.strokeColor = nil; CGPathRelease(_path); [super dealloc]; } @end
рдЧрд┐рдЯрд╣рдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб
рдХреЛрд░ рдПрдирд┐рдореЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧрд╛рдЗрдб - рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдгред
CGPathRef рд╕рдВрджрд░реНрдн - рд╕рд╛рде рд╣реА рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред