2011-11-12 32 views
31

Tôi có một UIButton ở đây, nơi tôi muốn có một gradient làm nền bên dưới hình ảnh (biểu tượng với nền trong suốt), nhưng tôi phải đối mặt với hai vấn đề khác nhau.UIButton với GradientLayer che khuất hình ảnh và tối màu gradient

Đầu tiên của CAGradientLayer dường như phủ lên trên cùng của hình ảnh bất kể tôi cố gắng thêm nó như thế nào, che khuất hình ảnh hoàn toàn.

Thứ hai, bản thân độ dốc dường như bị tối đi rất nhiều, giống như nút đã bị vô hiệu hóa, không phải vậy.

Dưới đây là mã của tôi:

self.backButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 35, 28, 28)]; 
[backButton addTarget:self 
       action:@selector(goBack) 
    forControlEvents:UIControlEventTouchUpInside]; 
[backButton setBackgroundColor:[UIColor clearColor]]; 
CAGradientLayer *buttonGradient = [CAGradientLayer layer]; 
buttonGradient.frame = backButton.bounds; 
buttonGradient.colors = [NSArray arrayWithObjects: 
         (id)[[UIColor colorWithRed:.0 
               green:.166 
               blue:.255 
               alpha:1] CGColor], 
         (id)[[UIColor colorWithRed:.0 
               green:.113 
               blue:.255 
               alpha:1] CGColor], 
         nil]; 
[buttonGradient setCornerRadius:backButton.frame.size.width/2]; 
[backButton.layer insertSublayer:buttonGradient 
         atIndex:0]; 
[backButton setImage:[UIImage imageNamed:@"backarrow.png"] 
      forState:UIControlStateNormal]; 
[backButton setEnabled:NO]; 
[topbarView addSubview:backButton]; 

Trả lời

61

Vì vậy, tôi cố gắng làm được việc này bằng cách thực hiện một [nút bringSubviewToFront: button.imageView] sau khi thêm gradient. Có vẻ như không có vấn đề gì tôi làm lớp mới sẽ thêm trên đầu trang của imageView, vì vậy tôi cần phải đẩy nó vào phía trước sau đó.

+0

đẹp giải pháp, nhờ –

+0

Perfect, nhờ – avdyushin

21

Ngoài ra, bạn có thể chèn layer gradient bên dưới lớp quan điểm hình ảnh của

CAGradientLayer* gradient = [CAGradientLayer layer]; 
// ... 
[button.layer insertSublayer:gradient below:button.imageView.layer]; 
+0

Bạn nghĩa đen vừa cứu mạng tôi! ;) Hình ảnh không được hiển thị sau khi tôi thêm lớp với gradient vì lớp đó là tất nhiên - phía trên lớp hình ảnh. Cảm ơn – virusss8

1

SWIFT 3

Ở đây đi một ví dụ: (Dựa trên Neil câu trả lời)

let layer = CAGradientLayer() 
    layer.frame = CGRect(x: 0, y: 0, width: myButtonOutlet.layer.frame.size.width, height: myButtonOutlet..layer.frame.size.height) 
    layer.colors = [UIColor.white.cgColor, pixelColorReceta.cgColor] 
    layer.masksToBounds = true 
    layer.cornerRadius = myButtonOutlet.layer.cornerRadius 
    myButtonOutlet.layer.insertSublayer(layer, below: myButtonOutlet..imageView?.layer) 

Happy coding :)

0

Swift 3

Bạn có thể di chuyển hình ảnh trên gradient:

contactButton.imageView?.layer.zPosition = 1 

hoặc chèn gradient dưới hình ảnh:

button.layer.insertSublayer(gradientLayer, below: button.imageView?.layer) 
Các vấn đề liên quan