2011-11-12 27 views
31

我有一个UIButton在这里,我想有一个渐变作为背景下面的图像(符号与透明背景),但我面临两个不同的问题。UIButton与GradientLayer模糊图像和加深渐变

CAGradientLayer的第一层似乎覆盖在图像的顶部,无论我如何添加它,完全模糊了图像。

其次梯度本身似乎变得很暗,像按钮被禁用,它不是。

这里是我的代码:

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

回答

61

所以我设法做[按钮bringSubviewToFront:button.imageView]来解决这个问题加入梯度之后。看起来无论我做什么新图层都会添加到imageView的顶部,所以我需要将它推到前面。

+0

尼斯溶液,感谢 –

+0

完美,感谢 – avdyushin

21

或者,可以插入图像视图的层之下的梯度层

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

你字面上刚刚救了我的命! ;)在添加渐变图层后,图像未显示,因为图层当然是 - 在图像图层上方。谢谢 – virusss8

1

SWIFT 3

这里去的例子:(在尼尔答案基于)

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) 

快乐编码:)

0

夫特3

可以移动图像的梯度以上:

contactButton.imageView?.layer.zPosition = 1 

或图像下插入梯度:

button.layer.insertSublayer(gradientLayer, below: button.imageView?.layer)