Swift:向按钮添加渐变后未显示按钮图像
Posted
技术标签:
【中文标题】Swift:向按钮添加渐变后未显示按钮图像【英文标题】:Swift: Button image not showing after adding gradient to button 【发布时间】:2017-04-04 11:44:03 【问题描述】:请您提供帮助,我创建了一个渐变,已添加到按钮中,但现在我使用情节提要设置的按钮图像不再显示。我的代码如下:
import UIKit
class MenuViewController: UIViewController
@IBOutlet weak var productsAndServicesButton: UIButton!
override func viewDidLoad()
super.viewDidLoad()
let bg = CAGradientLayer().redBackgroundGradient()
bg.frame = self.productsAndServicesButton.bounds
self.productsAndServicesButton.layer.insertSublayer(bg, at: 0)
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
实际渐变实现的函数代码如下:
import UIKit
extension CAGradientLayer
func redBackgroundGradient() -> CAGradientLayer
let startColor = UIColor(red:0.82, green:0.13, blue:0.19, alpha:1.0)
let centreColor = UIColor(red:0.65, green:0.04, blue:0.10, alpha:1.0)
let endColor = UIColor(red:0.56, green:0.04, blue:0.09, alpha:1.0)
let gradientColors : [CGColor] = [startColor.cgColor,centreColor.cgColor,endColor.cgColor]
let gradientLocations : [Float] = [0.0,0.5,1.0]
let gradientLayer : CAGradientLayer = CAGradientLayer()
gradientLayer.colors = gradientColors
gradientLayer.locations = gradientLocations as [NSNumber]?
return gradientLayer
我希望图像出现在渐变的顶部,如下所示
the red will be the gradient and the white image is the one i want to display
【问题讨论】:
【参考方案1】:您可以使用bringSubview(toFront:) 将按钮的imageView
移动到top position
if let imageView = button.imageView
productsAndServicesButton.bringSubviewToFront(imageView)
【讨论】:
【参考方案2】:作为@Oleh 答案的替代方案,您可以将内容添加到渐变层,例如,
gradient.contents = imageView.image?.cgImage
【讨论】:
以上是关于Swift:向按钮添加渐变后未显示按钮图像的主要内容,如果未能解决你的问题,请参考以下文章
将渐变层添加到具有相同名称 Xcode/Swift 的所有按钮
向导航栏添加渐变将隐藏 iOS 13.0 + 中的栏按钮项目