рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ UIButton рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ - рдФрд░ рд╣рдо рдХрд░реЗрдВрдЧреЗ
рд╣рдо UIButton рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ QuartzCore.framework рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ), рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП iOS vizulka рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рд░рд╣рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред
@class CAGradientLayer;
@interface CustomButton : UIButton {
@private
UIColor* _gradientStartColor;
UIColor* _gradientEndColor;
CAGradientLayer* _gradientLayer;
}
@property (nonatomic, retain) UIColor* gradientStartColor;
@property (nonatomic, retain) UIColor* gradientEndColor;
@end
рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рд▓реЛрдЧ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рд╣рдо CAGradientLayer рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдЯрди рдХреА рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╡рд░реНрдЧ рд╕рдореГрджреНрдз рднрд░рдг рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреЗ (рдореВрд▓) рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
#import "CustomButton.h"
#import <QuartzCore/QuartzCore.h>
@implementation CustomButton
@synthesize gradientStartColor = _gradientStartColor;
@synthesize gradientEndColor = _gradientEndColor;
рдЪреВрдБрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдлреЗрд╕рдмрд░реНрд╕реНрдЯ (рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдИрдмреА) рдореЗрдВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдиреАрдЪреЗ рджреА рдЧрдИ рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
-(void)awakeFromNib;
{
_gradientLayer = [[CAGradientLayer alloc] init];
_gradientLayer.bounds = self.bounds;
_gradientLayer.position = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
[self.layer insertSublayer:_gradientLayer atIndex:0];
self.layer.cornerRadius = 5.0f; // ,
self.layer.masksToBounds = YES;
self.layer.borderWidth = 1.0f;
}
рдврд╛рд▓ рдкрд░рдд рдбреНрд░рд╛рдЗрдВрдЧ
- (void)drawRect:(CGRect)rect;
{
if (_gradientStartColor && _gradientEndColor)
{
[_gradientLayer setColors:
[NSArray arrayWithObjects: (id)[_gradientStartColor CGColor]
, (id)[_gradientEndColor CGColor], nil]];
}
[super drawRect:rect];
}
рдХреНрдпрд╛ рд╣рдо рдХреБрдЫ рднреВрд▓ рдЧрдП рд╣реИрдВ?
- (void)dealloc {
[_gradientEndColor release];
[_gradientStartColor release];
[_gradientLayer release];
[super dealloc];
}
@end
рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рдХреНрд▓рд╛рд╕рдореИрди рдФрд░ zameplmeneny рд╣реИрдВ, рдЖрдЗрдП рдЗрд╕реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдХрдВрдЯреНрд░реЛрд▓рд░ (CustomButton) рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдЖрдЙрдЯрд▓реЗрдЯ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдБ
@interface GlossyButtonTestViewController : UIViewController {
@private
IBOutlet CustomButton* btn;
}
рдЖрдИрдмреА рдЦреЛрд▓реЗрдВ, рдХрд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЯрди рдбрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдЖрдЙрдЯрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдВред
рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ, рд╣рдо рдмрдЯрди рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдврд╛рд▓ рдХреЗ рд░рдВрдЧ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
- (void)viewDidLoad {
[super viewDidLoad];
btn.gradientStartColor = [UIColor whiteColor];
btn.gradientEndColor = [UIColor grayColor];
[self.view addSubview:btn];
}
рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ
рдпрд╣рд╛рдБ рдПрдХ рдмрдЯрди рд╣реИ
![](https://habrastorage.org/storage/daeebaf4/94bc439c/52352acc/18a1b5c3.png)
рдпрд╣ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рд╣реИ, рдФрд░ рд╣рдо рдЦреБрдж рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддрд┐рднрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдмрдЯрди рдкрд░ рдПрдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЬреЛрдбрд╝реЗрдВред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдФрд░ рдкрд░рдд рдбрд╛рд▓реЗрдВ рдФрд░ рдЬрд╛рдЧрд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЬреЛрдбрд╝реЗрдВ
_glossyLayer = [[CAGradientLayer alloc] init];
_glossyLayer.bounds = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height/2);
_glossyLayer.position = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/4);
[self.layer addSublayer:_glossyLayer];
рдбреНрд░рд╛рдЕрд░ рдореЗрдВ рд╣рдо рдПрдХ рд▓реЗрдпрд░ рдХреЗ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ
[_glossyLayer setColors:
[NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.99f] CGColor]
, (id)[[UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.2f] CGColor], nil]];
рдФрд░ ... рджреМрдбрд╝реЛ
рд╡рд╣ рд╕рдм рд╣реИред
![](https://habrastorage.org/storage/494b5cfe/7110c8f0/ccf62740/ee5650ed.png)
рдпрд╣ рди рднреВрд▓реЗрдВ рдХрд┐ рдЖрдк CoreAnimation рд▓реЗрдпрд░ рдореЗрдВ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдЯреНрд░рд╛рдВрдЬрд╝реИрдХреНрд╢рди рдЖрджрд┐ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдкреНрд░рдХреГрддрд┐ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд░рд╛рдЬреНрдп рдПрдирд┐рдореЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдкреЛрд╕реНрдЯ рдХреЗ рд▓реЗрдЦрдХ Marshet15 , рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрд░реНрдо рдирд╣реАрдВ рд╣реИрдВред