如何创建具有渐变和突出显示的 UIButton?

Posted

技术标签:

【中文标题】如何创建具有渐变和突出显示的 UIButton?【英文标题】:How to Create a UIButton with Gradient and Highlighting? 【发布时间】:2013-02-04 16:48:37 【问题描述】:

我正在尝试创建一个带有渐变背景的 UIButton。我做得很好,但是按钮在选择时没有突出显示(默认行为是按钮变暗)。

这是我的按钮:

-(UIButton *)createLoginButtonForSize:(CGSize)size 
    UIButton *loginButton = [UIButton buttonWithType:UIButtonTypeCustom];
    loginButton.translatesAutoresizingMaskIntoConstraints = FALSE;
    loginButton.layer.cornerRadius = 8;
    loginButton.titleLabel.text = @"Login";

    [loginButton addTarget:self action:@selector(loginCheck:) forControlEvents:UIControlEventTouchUpInside];


    [loginButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[loginButton(WIDTH)]"
                                                                        options:0
                                                                        metrics:@@"WIDTH": [NSNumber numberWithFloat:size.width]
                                                                          views:NSDictionaryOfVariableBindings(loginButton)]];

    [loginButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[loginButton(HEIGHT)]"
                                                                        options:0
                                                                        metrics:@@"HEIGHT": [NSNumber numberWithFloat:size.height]
                                                                          views:NSDictionaryOfVariableBindings(loginButton)]];

    CAGradientLayer *layer = [UIColor greenGradient];
    layer.frame = CGRectMake(0, 0, size.width, size.height);
    layer.cornerRadius = 8;

    [loginButton.layer insertSublayer:layer atIndex:0];

    return loginButton;

我需要自己处理突出显示吗?

【问题讨论】:

【参考方案1】:

是的,您需要自己处理突出显示。不过,与其编写自己的代码,不如查看 Jeff Lamarche 非常易于使用的 iPhone Gradient Buttons Project。它完全符合您的要求。它只有 2 个文件,因此很容易合并到您的项目中:

http://code.google.com/p/iphonegradientbuttons/source/browse/trunk/Classes/GradientButton.h http://code.google.com/p/iphonegradientbuttons/source/browse/trunk/Classes/GradientButton.m

以下截图取自Jeff's Blog discussing the project。

【讨论】:

以上是关于如何创建具有渐变和突出显示的 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章

突出显示时更改 UIButton 的背景颜色

具有突出显示不透明度和动画的圆形 UIButton

具有超过 1 个步骤的突出显示状态的 UIButton

蓝色渐变图像被错误地拉​​伸为 UIButton 的橙色渐变图像

Objective C - UIButton 保持突出显示/选中,背景颜色和字体颜色在突出显示/选中时发生变化

如何像 Apple 一样突出显示 UIView