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 半透明边框的主要内容,如果未能解决你的问题,请参考以下文章