UIButton 半透明边框

Posted

技术标签:

【中文标题】UIButton 半透明边框【英文标题】:UIButton Semi-Transparent Border 【发布时间】:2014-10-07 02:48:47 【问题描述】:

我有一个自定义按钮,边框应该是半透明的白色。

如果我这样做:

- (void) awakeFromNib         
    self.layer.cornerRadius = 6.0f;
    self.layer.borderWidth = 4.0f;
    self.layer.borderColor = [[UIColor colorWithWhite:1.0f alpha:0.5f] CGColor];

我明白了 - 透明度,但原始按钮颜色:

边框是半透明的,但是按钮的颜色。

【问题讨论】:

【参考方案1】:

将子图层的颜色设置为您希望按钮的颜色(不要设置按钮本身的背景颜色),并相对于按钮的矩形插入其矩形,

- (void) awakeFromNib 
    self.layer.cornerRadius = 6.0f;
    self.layer.borderWidth = 4.0f;
    self.layer.borderColor = [[UIColor colorWithWhite:1.0f alpha:0.5f] CGColor];
    CALayer *sub = [CALayer new];
    sub.frame = CGRectInset(self.bounds, 4, 4);
    sub.backgroundColor = [UIColor redColor].CGColor;
    [self.layer addSublayer:sub];

另一种方法,如果您希望背景颜色也被四舍五入,效果会更好,即为 self.layer 和 sublayer 使用背景颜色。在这种情况下,根本就需要使用边框。

- (void) awakeFromNib 
    self.layer.cornerRadius = 6.0f;
    self.tintColor = [UIColor whiteColor]; // make white text
    self.layer.backgroundColor = [[UIColor colorWithWhite:1.0f alpha:0.4] CGColor];
    CALayer *sub = [CALayer new];
    sub.cornerRadius = 4.0f;
    sub.frame = CGRectInset(self.bounds, 4, 4);
    sub.backgroundColor = [UIColor blueColor].CGColor;
    [self.layer addSublayer:sub];

【讨论】:

【参考方案2】:

您是否尝试过以下方法:

self.backgroundColor = [[UIColor colorWithWhite:1.0f alpha:0.5f] CGColor];

一种更简单的方法是通过选择按钮在 Interface Builder 中设置颜色,然后在 Attributes Inspector 中选择 alpha 和背景颜色:

【讨论】:

【参考方案3】:

以防万一有人寻找具有透明外边框的 UIImage。如果您只是设置图层边框,您将获得一个透明边框,但您会看到该边框后面的内部图像,而不是外部图像。我设法创建了一个带有透明外边框的 ImageView。

这个想法很简单。我从 UIImageView 保存 UIImage。然后我删除 UIImage 并将初始层设置为边框层。然后我在它上面放了一个新的较小的子层,并将保存的 UIImage 设置为它的内容。

#import <UIKit/UIKit.h>

@interface SSCircleImageView : UIImageView


@end

#import "SSCircleImageView.h"



@implementation SSCircleImageView


const CGFloat borderWidth = 5.0f;
const CGFloat borderAlpha = 0.3f;


- (void)awakeFromNib

    UIImage *image = self.image;
    self.image = nil;

    self.clipsToBounds = YES;
    self.layer.cornerRadius = self.frame.size.width / 2.0;
    self.layer.borderWidth = borderWidth;
    self.layer.borderColor = [[UIColor colorWithWhite:1.0f alpha:borderAlpha] CGColor];

    CALayer *subLayer = [CALayer layer];
    subLayer.frame =  CGRectInset(self.bounds, self.layer.borderWidth, self.layer.borderWidth);
    subLayer.cornerRadius = subLayer.frame.size.width / 2.0;
    subLayer.contents = (id)image.CGImage;
    [self.layer addSublayer:subLayer];




@end

看起来像这样:

【讨论】:

以上是关于UIButton 半透明边框的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 如何实现窗体边框半透明

半透明边框与background-clip

css 半透明的边框

android shape的使用详解以及常用效果(渐变色分割线边框半透明阴影效果等)

当我不希望它成为时,UIButton 是透明的

css3 这种半透明边框带阴影,里面填充白色该怎么做?