我想让我的 iOS 应用程序中的按钮具有红色渐变。起初我使用图像来做到这一点,但后来意识到我可以使用 QuartzCore 框架来做到这一点。我有以下实现文件:
#import "RedButton.h"
@implementation RedButton
@synthesize gradientLayer = _gradientLAyer;
- (void)awakeFromNib;
{
// Initialize the gradient layer
self.gradientLayer = [[CAGradientLayer alloc] init];
// Set its bounds to be the same of its parent
[self.gradientLayer setBounds:[self bounds]];
// Center the layer inside the parent layer
[self.gradientLayer setPosition:
CGPointMake([self bounds].size.width/2,
[self bounds].size.height/2)];
// Insert the layer at position zero to make sure the
// text of the button is not obscured
[[self layer] insertSublayer:self.gradientLayer atIndex:0];
// Set the layer's corner radius
[[self layer] setCornerRadius:5.0f];
// Turn on masking
[[self layer] setMasksToBounds:YES];
// Display a border around the button
// with a 1.0 pixel width
[[self layer] setBorderColor:[UIColor colorWithRed:(158.0f/255.0f) green:0.0f blue:0.0f alpha:1.0f].CGColor];
[[self layer] setBorderWidth:1.0f];
[self.gradientLayer setColors:[NSArray arrayWithObjects:
(id)[[UIColor colorWithRed:(214.0f/255.0f) green:0.0f blue:0.0f alpha:1.0f] CGColor],
(id)[[UIColor colorWithRed:(141.0f/255.0f) green:0.0f blue:0.0f alpha:1.0f] CGColor], nil]];
[[self layer] setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect;
{
[super drawRect:rect];
}
- (void)dealloc {
// Release our gradient layer
self.gradientLayer = nil;
[super dealloc];
}
@end
第一个问题 - 我在这里使用 awakeFromNib 是否正确?还是我应该使用 initWithFrame?
第二个问题 - 最初我使用图像并使用界面构建器来设置按钮的默认状态和突出显示状态。现在我不使用图像,如何设置按钮的外观以在突出显示时更改?我只想反转渐变。
第三个问题 - 我已经看到它写在一些你不应该继承 UIButton 的地方。如果没有,我将如何更改我的所有按钮以在不复制大量代码的情况下具有此渐变?
提前致谢。