首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAGradientLayer自动旋转

CAGradientLayer自动旋转
EN

Stack Overflow用户
提问于 2019-01-27 19:54:02
回答 1查看 33关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2019-01-28 00:40:51

我建议停止在viewDidLayoutSubviews中调整子层的工作。相反,我会让自动布局为你做这件事。

  • 首先,定义将呈现CAGradientLayerGradientView

类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.

  • Then,只需为您的新视图添加约束,并让自动布局处理配置。例如。

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,因为layerClassCAGradientLayer,所以它会自动为您更新。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54387836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档