次のような方法でレイヤーまたはグラデーション レイヤーを使用できます。
- (void) viewDidLoad
{
[super viewDidLoad];
CAGradientLayer *gradient = [CAGradientLayer layer];
loginButton.clipsToBounds = YES;
UIColor *topColor = [UIColor colorWithRed:255/255 green:255/255 blue:255/255 alpha:0.9];
UIColor *middleColor = [UIColor colorWithRed:61.0/255 green:130.0/255 blue:244.0/255 alpha:1.0];
UIColor *bottomColor = [UIColor colorWithRed:24.0/255 green:77.0/255 blue:214.0/255 alpha:1.0];
gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor,
(id)middleColor.CGColor, (id)bottomColor.CGColor, nil];
gradient.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.05f],
[NSNumber numberWithFloat:0.7],
nil];
gradient.frame = [[loginButton layer] bounds];
gradient.cornerRadius = 4.0;
gradient.borderWidth = 0.5;
[loginButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[loginButton.layer insertSublayer:gradient atIndex:0];
[loginButton addTarget:self action:@selector(loginTouchDown:)
forControlEvents:UIControlEventTouchDown];
[loginButton addTarget:self action:@selector(loginTouchUp:)
forControlEvents:UIControlEventTouchUpOutside];
}
- (IBAction)loginTouchDown:(id)sender
{
CAGradientLayer *gradient = [loginButton.layer.sublayers objectAtIndex:0];
UIColor *topColor = [UIColor colorWithRed:24.0/255 green:77.0/255 blue:214.0/255 alpha:1.0];
UIColor *middleColor = [UIColor colorWithRed:24.0/255 green:77.0/255 blue:214.0/255 alpha:1.0];
UIColor *bottomColor = [UIColor colorWithRed:24.0/255 green:77.0/255 blue:214.0/255 alpha:1.0];
gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor, (id)middleColor.CGColor,
(id)bottomColor.CGColor, nil];
}
- (IBAction)loginTouchUp:(id)sender
{
CAGradientLayer *gradient = [loginButton.layer.sublayers objectAtIndex:0];
UIColor *topColor = [UIColor colorWithRed:255/255 green:255/255 blue:255/255 alpha:0.9];
UIColor *middleColor = [UIColor colorWithRed:61.0/255 green:130.0/255 blue:244.0/255 alpha:1.0];
UIColor *bottomColor = [UIColor colorWithRed:24.0/255 green:77.0/255 blue:214.0/255 alpha:1.0];
gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor,
(id)middleColor.CGColor, (id)bottomColor.CGColor, nil];
}
- (IBAction)loginButton:(id)sender
{
[self loginTouchUp:sender];
[self doLogin];
}
ログイン ボタンはストーリー ボードで定義され、ローカル ビュー プロパティに割り当てられます。
(*.h ファイル内)
@interface LoginViewController : UIViewController <UITextFieldDelegate>
@property (nonatomic, retain) IBOutlet UIButton *loginButton;
@end
(*.m ファイル内)
@synthesize loginButton;
viewdidload では、通常の状態とプッシュされた状態のグラデーション レイヤーを定義します。次に、up/down イベントでそれらを操作します。アクションを実行するには、ボタン ハンドラとして loginButton() も必要です。このように、このボタンの動作は理想的には通常のボタンと同じです。これだそうです。
それがどのように機能するかの例は、iPhone アプリストアで見つけることができます。Torchooという無料アプリがあります。実行すると、最初に表示されるのはログイン画面です。ログインボタンがあります。これが必要かどうかを確認するには、それを押してください。このコードはそのプロジェクトのものです。