我使用CAGradientLayer来生成这个细线渐变。问题是自动旋转并不平滑。随着UIViewController的旋转,我在viewDidLayoutSubviews中设置了包含该图层的视图的帧,并重置了该图层的帧。当我自动旋转时,线的高度增加,梯度从上到下旋转一段时间。自动旋转这一层的正确方法是什么?

发布于 2019-01-28 00:40:51
我建议停止在viewDidLayoutSubviews中调整子层的工作。相反,我会让自动布局为你做这件事。
CAGradientLayer的GradientView:类GradientView: UIView { //指定基本层应为渐变层覆盖类var layerClass: AnyClass { return CAGradientLayer.self } //让计算属性返回layerClass私有var gradientLayer: CAGradientLayer { return layer as!CAGradientLayer } //当我们更新颜色数组时,相应地更新渐变层的颜色: UIColor = [] { didSet { gradientLayer.colors = colors.map { $0.cgColor } //初始化器覆盖初始化(frame: CGRect = .zero) { super.init(frame: frame) configure() } required init?(编码器aDecoder: NSCoder) { super.init(coder: aDecoder)configure() } //配置水平渐变私有函数的视图configure() { colors = .red,.yellow,.green,.blue gradientLayer.startPoint = CGPoint(x: 0,y: 0.5) gradientLayer.endPoint = CGPoint(x: 1,y: 0.5) }}
通过指定此子视图的layerClass,您不必担心调整大小的问题。根据需要调整视图的大小,层将自动调整大小accordingly.
gradientView.translatesAutoresizingMaskIntoConstraints = gradientView = GradientView() gradientView.translatesAutoresizingMaskIntoConstraints= gradientView.leadingAnchor.constraint(equalTo: view.addSubview(gradientView) NSLayoutConstraint.activate( gradientView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor,constant:-10),false view.leadingAnchor,constant: 10),false view.trailingAnchor,constant:-10) )
现在,很明显,使用任何对您有效的约束,但希望这说明了这个想法。让auto layout配置视图的frame,因为layerClass是CAGradientLayer,所以它会自动为您更新。
https://stackoverflow.com/questions/54387836
复制相似问题