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 を使用する必要がありますか?
2 番目の質問 - もともと私は画像を使用し、インターフェイス ビルダーを使用して、ボタンのデフォルトおよび強調表示された状態を設定していました。画像を使用していないので、強調表示されたときにボタンの外観を変更するにはどうすればよいですか? グラデーションを逆にしたいだけです。
3 番目の質問 - UIButton をサブクラス化してはいけないと書かれているのを見たことがあります。そうでない場合、多くのコードを複製せずに、すべてのボタンをこのグラデーションに変更するにはどうすればよいでしょうか?
前もって感謝します。