2014-10-07 125 views
1

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

如果我这样做:

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

我得到这个 - 透明度,但原来的按钮颜色:

enter image description here

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

回答

2

将子图层的颜色设置为想要按钮的颜色(不要设置按钮本身的背景颜色),并将其矩形插入到按钮的矩形中,

- (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]; 
} 

enter image description here

另一种方式来做到这一点,如果你想要的背景颜色过于圆润,这将更好地工作,是用背景色self.layer和子层两者。在这种情况下,所有人都需要使用边框。

- (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]; 
} 

enter image description here

0

你试过类似如下:

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

一种更简单的方法是通过选择按钮,然后选择在属性检查器中的α和背景颜色设置在界面生成器的颜色:

enter image description here

0

以防万一,如果有人查找与透明外边框的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 

它看起来像这样: enter image description here