我想讓我的iOS應用程序中的按鈕具有紅色漸變。起初我使用圖像來做到這一點,但後來意識到我可以用QuartzCore框架來完成。我有以下執行文件:iOS - 分類UIButton - 在何處添加高亮顯示狀態的代碼?
#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。如果沒有,我將如何改變我的所有按鈕來使這個漸變沒有重複很多代碼?
在此先感謝。