带有GradientLayer的UIButton模糊图像并使渐变变暗
我有一个UIButton在这里,我想有一个渐变作为背景下的背景(具有透明背景的符号),但我面临着两个不同的问题。
第一个CAGradientLayer似乎叠加在图像的顶部,不pipe我怎么尝试添加它,完全模糊了图像。
其次梯度本身似乎变得很暗,就像button被禁用,事实并非如此。
这是我的代码:
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];
所以我设法通过在添加渐变后执行[button bringSubviewToFront:button.imageView]来解决这个问题。 看来不pipe我做什么,新图层都会添加到imageView的顶部,所以我需要把它推到前面。
或者,您可以在图像视图的图层下方插入渐变图层
CAGradientLayer* gradient = [CAGradientLayer layer]; // ... [button.layer insertSublayer:gradient below:button.imageView.layer];
SWIFT 3
这里举一个例子:(根据Neil的答案)
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)
快乐编码:)
Swift 3
您可以将图像移动到渐变上方:
contactButton.imageView?.layer.zPosition = 1
或者在图像下插入渐变:
button.layer.insertSublayer(gradientLayer, below: button.imageView?.layer)