рд╢реБрдн рджреЛрдкрд╣рд░,% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%!
рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ, рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдореЗрдВ рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╡рд┐рдВрдбреЛ рд╢реАрд░реНрд╖рдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдЕрдЧрд░ i.al.app рдФрд░ Adress Book.app рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

Google рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд▓рд┐рдВрдХ рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рд▓реАрдб рджрд┐рдП, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо (рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдПрдХ рдиреГрддреНрдп рдХреЗ рдмрд╛рдж) рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд╢реАрд░реНрд╖рдХ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рд╣реЗрдбрд░, рдЙрдирдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ (рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП), рдЖрджрд┐ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА ... рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдореИрдВ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЦрд┐рдбрд╝рдХреА рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдХрд╛ рд░рдВрдЧ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ (рдирдП рд╢реАрд░реНрд╖рдХ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рджреНрднрд╛рд╡ рдореЗрдВ рд╣реЛрдирд╛)ред рд╕рднреА рдЕрд╕рдлрд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╕реБрд░рд╛рдЧ рдорд┐рд▓рдиреЗ рд╢реБрд░реВ рд╣реЛ рдЧрдП ...
рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ,
рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд░реНрдЧ
NSThemeFrame рдЦрд┐рдбрд╝рдХреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЪреЗрддрд╛рд╡рдиреА! рдХреИрдЯ рдХреЗ рддрд╣рдд
рд░рдирдЯрд╛рдЗрдо рдХрд╛
рдЬрд╛рджреВ рд╣реИ ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рдирд┐рдЬреА рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ NSThemeFrame.h (рдореВрд▓ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдЙрд▓рдЯрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ), рдЗрд╕реЗ Google рдкрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рдЖрд▓рд╕реНрдп рд╣реИ, рддреЛ
рдпрд╣рд╛рдВ рдПрдХ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ рд╣реИ ред рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдбреНрд░рд╛рдЕрд░рдХреНрдЯ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ: рдФрд░ _drawTitleStringIn: withColor: Methodsред рдирд╛рдо рдмреЛрд▓ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╡рд┐рдВрдбреЛ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рднрд╛рд░ рджреЗрдВрдЧреЗред <Objc / runtime.h> рдХреЗ рд╕рд╛рде рд╕рд╢рд╕реНрддреНрд░, рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ NSThemeFrame рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдирд┐рдЬреА рд╣реЗрдбрд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП AppDelegate рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ NSWindow рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЙрдЯрд▓реЗрдЯ рд╣реИ, рддреЛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрд░реЗрдВ:
id _class = [[[self.window contentView] superview] class];
рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ NSThemeFrame рд╡рд┐рдВрдбреЛ рдореЗрдВ рдмреЗрд╕ рд╡реНрдпреВ рд╣реИ, рдФрд░ рд╣рдорд╛рд░рд╛ contentView рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред
рджреВрд╕рд░реЗ, рд╣рдо
рдЬрд╛рджреВ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред
рд╣рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ drawInRect: рдФрд░ _drawTitleStringIn: withColor: рддрд░реАрдХреЗ рд╣реИрдВ, рдлрд┐рд░ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ NSThemeFrame рд╡рд░реНрдЧ (рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдореЛрдВ рдХреЗ рддрд╣рдд) рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рд╕реЗ рдореВрд▓ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реАрдХреЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ? рдЦреИрд░, рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо!
рд╣рдо рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХреЗ рдбреНрд░реЙ рд╣реЗрд▓реНрдкрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рдЪреЗрддрд╛рд╡рдиреА рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ)ред
#import <objc/runtime.h> // global frame color static NSColor * gFrameColor = nil; // global title color static NSColor * gTitleColor = nil; @interface DrawHelper : NSObject { } // to prevent errors - (float)roundedCornerRadius; - (void)drawRectOriginal:(NSRect)rect; - (void) _drawTitleStringOriginalIn: (NSRect) rect withColor: (NSColor *) color; - (NSWindow*)window; - (id)_displayName; - (NSRect)bounds; - (void)_setTextShadow:(BOOL)on; - (void)drawRect:(NSRect)rect; - (void) _drawTitleStringIn: (NSRect) rect withColor: (NSColor *) color; @end @implementation DrawHelper - (void)drawRect:(NSRect)rect { // Call original drawing method [self drawRectOriginal:rect]; [self _setTextShadow:NO]; NSRect titleRect; NSRect brect = [self bounds]; // creating round-rected bounding path float radius = [self roundedCornerRadius]; NSBezierPath *path = [NSBezierPath alloc]; NSPoint topMid = NSMakePoint(NSMidX(brect), NSMaxY(brect)); NSPoint topLeft = NSMakePoint(NSMinX(brect), NSMaxY(brect)); NSPoint topRight = NSMakePoint(NSMaxX(brect), NSMaxY(brect)); NSPoint bottomRight = NSMakePoint(NSMaxX(brect), NSMinY(brect)); [path moveToPoint: topMid]; [path appendBezierPathWithArcFromPoint: topRight toPoint: bottomRight radius: radius]; [path appendBezierPathWithArcFromPoint: bottomRight toPoint: brect.origin radius: radius]; [path appendBezierPathWithArcFromPoint: brect.origin toPoint: topLeft radius: radius]; [path appendBezierPathWithArcFromPoint: topLeft toPoint: topRight radius: radius]; [path closePath]; [path addClip]; // rect for title titleRect = NSMakeRect(0, 0, brect.size.width, brect.size.height); // get current context CGContextRef context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort]; // multiply mode - for colorizing original border CGContextSetBlendMode(context, kCGBlendModeMultiply); // draw background if (!gFrameColor) // default bg color gFrameColor = [NSColor colorWithCalibratedRed: (126 / 255.0) green: (161 / 255.0) blue: (177 / 255.0) alpha: 1.0]; [gFrameColor set]; [[NSBezierPath bezierPathWithRect:rect] fill]; // copy mode - for title CGContextSetBlendMode(context, kCGBlendModeCopy); // draw title text [self _drawTitleStringIn: titleRect withColor: nil]; } - (void)_drawTitleStringIn: (NSRect) rect withColor: (NSColor *) color { if (!gTitleColor) // default text color gTitleColor = [NSColor colorWithCalibratedRed: 1.0 green: 1.0 blue: 1.0 alpha: 1.0]; [self _drawTitleStringOriginalIn: rect withColor: gTitleColor]; } @end
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдо рджреЛ рд░рдВрдЧреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ - рд╢реАрд░реНрд╖рдХ рд░рдВрдЧ рдФрд░ рдкрд╛рда рд░рдВрдЧ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдЙрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡реЗ NSThemeFrame рдореЗрдВ рд╣реИрдВ) рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╛рда рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреЛ рддрд░реАрдХреЗред
рдЙрджрд╛рд╣рд░рдг рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдорд╛рдирдХ рд╣реЗрдбрд┐рдВрдЧ рдХреА рдПрдХ рдбреНрд░рд╛рдЗрдВрдЧ рдмрдирд╛рдИ рдФрд░ рдЗрд╕реЗ рдПрдХ рд░рдВрдЧ рдХреЗ рд╕рд╛рде "рд░рдВрдЧреАрди" рдХрд┐рдпрд╛ (рдпрд╣ рд╣реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп "рдмрд▓реНрдХ" рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ)ред рдЖрдк NSImage рдпрд╛ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╕реНрдЯрдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ drawRectOriginal рдХреЛ рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛: рдХреНрдпреЛрдВрдХрд┐ рддрдм рд╣рдореЗрдВ рдорд╛рдирдХ рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдорд╛рдирдХ рд╣реЗрдбрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЧреЛрд▓ рдЖрдпрдд рд╣реИред рдореИрдВ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреИрд░-рдЧреЛрд▓ рдирд┐рдЪрд▓реЗ рдХреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде) рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдПред
рдареАрдХ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдорд╛рдирдХ рд╣реЗрдбрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣рдорд╛рд░реЗ рд░рдВрдЧ рдХрд╛ рдПрдХ рдбреНрд░рд╛рдЗрдВрдЧ рдмрд╣реБ рдореЛрдб рдореЗрдВ рд╣реИ (рдПрдкреНрдкрд▓ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдореЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рдФрд░ рдмрд╣реБрдд рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдирд╛ рд╢реАрд░реНрд╖рдХ рдкрд╛рда рдмрдирд╛рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ, рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрд╕ рдкрд░ рджрд┐рдП рдЧрдП рд░рдВрдЧ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд╛рда рдХреЛ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░рдВрдЧ (рдореВрд▓ рдбреНрд░рд╛рдЗрдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХреЗ рд╕рд╛рде рдЬрдмрд░рди рдЦреАрдВрдЪрддрд╛ рд╣реИред
рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдП! рдЕрд╕рд▓ рдореЗрдВ,
рдЬрд╛рджреВ :
- (void)applicationWillFinishLaunching:(NSNotification *)aNotification { id _class = [[[self.window contentView] superview] class];
(рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдпрд╣ рдХреЛрдб AppDelegate.m рдореЗрдВ рдбрд╛рд▓рд╛, рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдЦрд┐рдбрд╝рдХреА рдкрд╣рд▓реЗ рд╣реА рдмрди рдЬрд╛рдПрдЧреА)
рдХреНрд░рдо рдореЗрдВ:
1. рд╡рд░реНрдЧ NSThemeFrame рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
2. drawRect рдореЗрдердб рд▓реЗрдВ: DrawHelper рдХреНрд▓рд╛рд╕ рд╕реЗ
3. рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ NSThemeFrame рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдбреНрд░реЙ рд░реЗрдХреНрдЯреНрд░реАрдСрд░реНрдЧрд┐рдирд▓ рдХреЗ рддрд╣рдд рдЬреЛрдбрд╝реЗрдВ:
4. рдбреНрд░реЙрдЗрдВрдЯрд░рдХреНрдЯ рд▓реЗрдВ: рдФрд░ NSThemeFrame рд╡рд░реНрдЧ рд╕реЗ рдбреНрд░рд╛рдСрд░рд┐рдЬрдирд▓ рддрд░реАрдХреЗ:
5. рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡реИрдк!
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо _drawTitleStringIn: withColor: рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддреЗ рд╣реИрдВред
рдФрд░ рдЕрдм рд╣рдо рдЖрдирдиреНрдж рдордирд╛ рд╕рдХрддреЗ рд╣реИрдВ! рд╣рдорд╛рд░реА рдЦрд┐рдбрд╝рдХреА рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рд╢реАрд░реНрд╖рдХ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдЖрдБрдЦреЛрдВ рдХреЛ рдкреНрд░рд╕рдиреНрди рдХрд░рддреА рд╣реИ (рдпрд╛ рдирд╣реАрдВ)ред
рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд╕реНрдХрд┐рдирд┐рдВрдЧ" (рдордХреНрдЦреА рдкрд░ рд╢реАрд░реНрд╖рдХ рдХрд╛ рд░рдВрдЧ рдмрджрд▓рдирд╛) рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдбреНрд░рд╛ рд╣реЗрд▓реНрдкрд░ рдХреНрд▓рд╛рд╕ рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рдирд╡рд┐рд▓реЗрдирдлрд╛рдЗрдирд▓ рд▓рдВрдЪрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рд╛рдордЧреНрд░реА: рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ .m рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ gFrameColor рдФрд░ gTitleColor рддрдХ рдкрд╣реБрдВрдЪ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдШреЛрд╖рд┐рдд рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдкрдиреА рд╕рднреА рд╡рд┐рдВрдбреЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рди рднреВрд▓реЗрдВред рд▓реЗрдХрд┐рди рдпрд╣, рдлрд┐рд░ рд╕реЗ, рдкрд╛рдардХ рдХреЛ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред
рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
1. NSThemeFrame рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рдВрдбреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;
2. рдпрд╣ рд╡рд┐рдзрд┐ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реАрд░реНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдмреЗрд╢рдХ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА);
3. рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЛ NSThemeFrame рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдХреЗ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NSGrayFrame рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рджреВрд╕рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рднреА рдЦреЗрд▓рдирд╛ рд╣реЛрдЧрд╛;
4. рд░рдирдЯрд╛рдЗрдо рд╡рд╛рд▓реЗ рдЧреЗрдо рдореЙрдбрд░реЗрд╢рди рдореЗрдВ рдЕрдЪреНрдЫреЗ рд╣реЛрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ: рд╢реБрд░реВ рдореЗрдВ рдпрд╣ рд╕рдм рдХреНрдпреВрдЯреА + рдХреЛрдХреЛ рдмрдВрдбрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╢реБрджреНрдз рдХреЛрдХреЛ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдХреЛрдХреЛ рдХреЗ рд╕рд╛рде рдХреНрдпреВрдЯреА рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рдЧреБрд░ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
PPS: рдореИрдВ рдХреЛрдб рдХреЛ github рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦрддрд╛, рдпрд╣ AppDelegate.m рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред