宽窄优行-由【嘉易行】项目成品而来
younger_times
2023-04-06 a1ae6802080a22e6e6ce6d0935e95facb1daca5c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//
//  GradientView.swift
//  SwiftEntryKit
//
//  Created by Daniel Huri on 4/20/18.
//  Copyright (c) 2018 huri000@gmail.com. All rights reserved.
//
 
import UIKit
 
class GradientView: UIView {
    
    struct Style {
        let gradient: EKAttributes.BackgroundStyle.Gradient
        let displayMode: EKAttributes.DisplayMode
        
        init?(gradient: EKAttributes.BackgroundStyle.Gradient?,
              displayMode: EKAttributes.DisplayMode) {
            guard let gradient = gradient else {
                return nil
            }
            self.gradient = gradient
            self.displayMode = displayMode
        }
    }
    
    private let gradientLayer = CAGradientLayer()
    
    var style: Style? {
        didSet {
            setupColor()
        }
    }
    
    init() {
        super.init(frame: .zero)
        layer.addSublayer(gradientLayer)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        gradientLayer.frame = bounds
    }
    
    private func setupColor() {
        guard let style = style else {
            return
        }
        gradientLayer.colors = style.gradient.colors.map {
            $0.color(for: traitCollection, mode: style.displayMode).cgColor
        }
        gradientLayer.startPoint = style.gradient.startPoint
        gradientLayer.endPoint = style.gradient.endPoint
    }
    
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        setupColor()
    }
}