CAGradientLayer:其他 UIObjects 没有出现

Posted

技术标签:

【中文标题】CAGradientLayer:其他 UIObjects 没有出现【英文标题】:CAGradientLayer: other UIObjects not showing up 【发布时间】:2018-07-12 21:01:28 【问题描述】:

当我在 ios 上使用 CAGradientLayer 为我的视图控制器设置渐变时,我之前使用界面构建器放置的对象没有显示出来。当我拿掉 gradientLayer 函数时,这些对象就会出现。此外,当我以编程方式将这些对象添加为子视图时,它们会显示在 iOS 模拟器中。这是怎么回事?这是我的渐变层代码:

func setUpGradient()
    let topColor=UIColor(red: 255/255, green: 149/255, blue: 56/255,alpha: 1)
let bottomColor=UIColor(red: 216/255, green: 57/255, blue: 177/255, 
alpha: 1)
    let gradientColors: [CGColor]=[topColor.cgColor,bottomColor.cgColor]
    var gradientLayer = CAGradientLayer()
    gradientLayer.frame = self.view.bounds
    gradientLayer.colors=gradientColors
    gradientLayer.startPoint=CGPoint(x: 0, y:0)
    gradientLayer.endPoint=CGPoint(x: 0, y:1)
    self.view.layer.addSublayer(gradientLayer)

【问题讨论】:

【参考方案1】:

原因很简单,就是通过这一行在 IB 中添加元素时,渐变层覆盖了所有元素

self.view.layer.addSublayer(gradientLayer)

所以你可以像这样在它们下面插入它

self.view.layer.insertSublayer(gradientLayer,at:0)

【讨论】:

抱歉- swift 新手...感谢您的解释,但您的意思是“将其插入下方”。有什么方法可以使用界面编辑器添加其他组件,而不是在我创建渐变后以编程方式添加? 你也可以继承 UIView 实现渐变添加并将该类分配给 IB 中的视图 每个 UI 元素都是一个图层,因此插入意味着将渐变放在最后

以上是关于CAGradientLayer:其他 UIObjects 没有出现的主要内容,如果未能解决你的问题,请参考以下文章

CAGradientLayer不显示

Swift - 通过 switch 语句为 CAGradientLayer 设置动画

带有 CAShapeLayer 的 UIView 不显示 CAGradientLayer

CAGradientLayer功能

为啥我无法使用 CAGradientLayer 的掩码

swift渐变之CAGradientLayer