gpt4 book ai didi

ios - 自定义元素的子层不在模拟器中渲染,在界面生成器中渲染

转载 作者:行者123 更新时间:2023-11-30 12:35:34 25 4
gpt4 key购买 nike

我正在尝试制作一个自定义渐变层,我可以在界面生成器中为我的不同 View 重用它。我创建了以下类:

导入UIKit

@IBDesignable
class MyGradientLayer: UIView {

let gradient = CAGradientLayer()

public override init(frame: CGRect) {
super.init(frame: frame)

gradient.colors = [startColor.cgColor, endColor.cgColor]
gradient.frame = self.bounds
gradient.locations = [0, 1]
self.layer.insertSublayer(gradient, at: 0)
}

public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}

@IBInspectable
public var startColor: UIColor = UIColor.init(red: 1, green: 0.364, blue: 0.22352, alpha: 1.0) {
didSet {
gradient.colors = [startColor.cgColor, endColor.cgColor]
}
}

@IBInspectable
public var endColor: UIColor = UIColor.init(red: 1, green: 0.1607, blue: 0.40392, alpha: 1.0) {
didSet {
gradient.colors = [startColor.cgColor, endColor.cgColor]
}
}

override func layoutSubviews() {
gradient.frame = self.bounds
gradient.locations = [0, 1]
super.layoutSubviews()
}

}

然后,我将 UIView 添加到 ViewController 中,并在身份检查器中将类设置为 MyGradientLayer。然后,我漂亮的小渐变 View 在界面生成器中渲染得很好。我继续设置约束以占据整个屏幕(我尝试了手动和自动约束)。一切都很好,对吧?

不,它不会在模拟器中渲染渐变层。但是,我知道 View 在那里并且正在被放到屏幕上,因为我可以在IB中设置UIView的背景颜色,并且它显示在整个屏幕上。

对于为什么我的自定义 UIView 内的渐变层没有在模拟器中渲染有什么想法吗?

谢谢!

最佳答案

看看如果按如下方式更改“init”会发生什么:

public override init(frame: CGRect) {
super.init(frame: frame)
self.commonInit()
}

public required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.commonInit()
}

func commonInit() {

gradient.colors = [startColor.cgColor, endColor.cgColor]
gradient.frame = self.bounds
gradient.locations = [0, 1]
self.layer.insertSublayer(gradient, at: 0)

}

根据它的使用方式,您可能需要设置一个标志以防止 commonInit 被多次调用。尝试一下看看。

关于ios - 自定义元素的子层不在模拟器中渲染,在界面生成器中渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42916190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com