gpt4 book ai didi

ios - CAGradientLayer 自动旋转

转载 作者:行者123 更新时间:2023-11-28 23:38:14 25 4
gpt4 key购买 nike

我使用 CAGradientLayer 来生成这个细线渐变。问题是自转不顺畅。当 UIViewController 旋转时,我在 viewDidLayoutSubviews 中设置包含该层的 View 的框架,并重置该层的框架。当我自动旋转时,线条的高度会增加,并且渐变会在旋转一段时间内从上到下。自动旋转该图层的正确方法是什么?

enter image description here

最佳答案

我建议不要在 viewDidLayoutSubviews 中调整子层。相反,我会让自动布局为您完成此操作。

  • 首先,定义将渲染 CAGradientLayerGradientView:

    class GradientView: UIView {
    // specify that the base layer should be gradient layer

    override class var layerClass: AnyClass {
    return CAGradientLayer.self
    }

    // it can be convenient to have computed property that returns layer of the `layerClass`

    private var gradientLayer: CAGradientLayer {
    return layer as! CAGradientLayer
    }

    // when we update our array of colors, update the gradient layer accordingly

    var colors: [UIColor] = [] {
    didSet {
    gradientLayer.colors = colors.map { $0.cgColor }
    }
    }

    // initializers

    override init(frame: CGRect = .zero) {
    super.init(frame: frame)
    configure()
    }

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

    // configure the view for horizontal gradient

    private func configure() {
    colors = [.red, .yellow, .green, .blue]
    gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
    gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
    }
    }

    通过指定 layerClass对于这个 subview ,您不必担心调整大小的问题。根据需要调整 View 大小,图层将自动相应调整大小。

  • 然后,只需为新 View 添加约束,并让自动布局负责配置。例如

    let gradientView = GradientView()
    gradientView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(gradientView)

    NSLayoutConstraint.activate([
    gradientView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -10),
    gradientView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10),
    gradientView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10),
    gradientView.heightAnchor.constraint(equalToConstant: 3)
    ])

现在,显然,使用任何适合您的约束,但希望这说明了这个想法。让自动布局配置 View 的frame,并让因为layerClassCAGradientLayer,它会自动为您更新。

关于ios - CAGradientLayer 自动旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54387836/

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