如何获得黑色光泽的UIButton外观?

时间:2011-09-19 21:42:16

标签: ios uibutton

这可能吗?我在应用程序中看过它,但我不想使用图像文件来实现它。

7 个答案:

答案 0 :(得分:6)

您可以使用此代码:

-(void) addGradient:(UIButton *) _button {

    // Add Border
    CALayer *layer = _button.layer;
    layer.cornerRadius = 8.0f;
    layer.masksToBounds = YES;
    layer.borderWidth = 1.0f;
    layer.borderColor = [UIColor colorWithWhite:0.5f alpha:0.2f].CGColor;

    // Add Shine
    CAGradientLayer *shineLayer = [CAGradientLayer layer];
    shineLayer.frame = layer.bounds;
    shineLayer.colors = [NSArray arrayWithObjects:
                         (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor,
                         (id)[UIColor colorWithWhite:1.0f alpha:0.2f].CGColor,
                         (id)[UIColor colorWithWhite:0.75f alpha:0.2f].CGColor,
                         (id)[UIColor colorWithWhite:0.4f alpha:0.2f].CGColor,
                         (id)[UIColor colorWithWhite:1.0f alpha:0.4f].CGColor,
                         nil];
    shineLayer.locations = [NSArray arrayWithObjects:
                            [NSNumber numberWithFloat:0.0f],
                            [NSNumber numberWithFloat:0.5f],
                            [NSNumber numberWithFloat:0.5f],
                            [NSNumber numberWithFloat:0.8f],
                            [NSNumber numberWithFloat:1.0f],
                            nil];
    [layer addSublayer:shineLayer];
}

答案 1 :(得分:3)

“求助”图像文件是正确的做法。当然,你可以编写代码来制作渐变和东西,但在photoshop中更容易完成。

将按钮的背景图像设置为可伸缩的图像,然后完成。

答案 2 :(得分:1)

在iOS 6中使用这些光泽的UIButton类时,我遇到了一个特殊的问题。虽然会出现阴影和粗边框,但实际的UIButton的背景会显示为白色。

事实证明,如果您在viewDidLoad中输入代码,则在自动布局下,您创建的视图将不会显示其框架,因此您的图层最终会显示CGRectZero的框架。

只需将代码(最重要的是设置渐变图层框架的部分)移动到viewDidLayoutSubviews

答案 3 :(得分:0)

使用具有不同渐变的几个图层。

在Google周围进行搜索 - 这在代码中是完全可行的。

答案 4 :(得分:0)

试试这个:http://www.mlsite.net/blog/?p=1837,它是UIButton的一个类别类,使其具有光泽度。根据我的口味,它有点黄色,但比试图维护一大堆Photoshop按钮更容易。

答案 5 :(得分:0)

This自定义UIButton组件可能会有所帮助。enter image description here

答案 6 :(得分:0)

我修改了@julie和swift4版本的位代码

override func viewDidLayoutSubviews() {

     addGradient(btn_near);
    addGradient(btn_location);
    addGradient(btn_addramp);
}


func addGradient(_ _button: UIButton?) {

    // Add Border
    let layer: CALayer? = _button?.layer
    layer?.cornerRadius = 8.0
    layer?.masksToBounds = true
    layer?.borderWidth = 1.0
    layer?.borderColor = UIColor(white: 0.5, alpha: 0.2).cgColor

    // Add Shine
    let shineLayer = CAGradientLayer()
    shineLayer.frame = layer?.bounds ?? CGRect.zero
    shineLayer.colors = [UIColor(white: 1.0, alpha: 0.4).cgColor, UIColor(white: 1.0, alpha: 0.2).cgColor, UIColor(white: 0.75, alpha: 0.2).cgColor, UIColor(white: 0.4, alpha: 0.2).cgColor, UIColor(white: 1.0, alpha: 0.4).cgColor]
    shineLayer.locations = [NSNumber(value: 0.0), NSNumber(value: 0.5), NSNumber(value: 0.5), NSNumber(value: 1.0), NSNumber(value: 1.0)]
    layer?.addSublayer(shineLayer)



}