宽窄优行-由【嘉易行】项目成品而来
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
//
//  EKStyleView.swift
//  SwiftEntryKit
//
//  Created by Daniel Huri on 4/28/18.
//
 
import UIKit
 
class EKStyleView: UIView {
    
    private lazy var borderLayer: CAShapeLayer = {
        return CAShapeLayer()
    }()
    
    private var roundCorners: EKAttributes.RoundCorners!
    private var border: EKAttributes.Border!
    
    var appliedStyle = false
    
    func applyFrameStyle(roundCorners: EKAttributes.RoundCorners, border: EKAttributes.Border) {
        self.roundCorners = roundCorners
        self.border = border
        
        var cornerRadius: CGFloat = 0
        var corners: UIRectCorner = []
        (corners, cornerRadius) = roundCorners.cornerValues ?? ([], 0)
        
        let size = CGSize(width: cornerRadius, height: cornerRadius)
        let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: size)
        
        if !corners.isEmpty && cornerRadius > 0 {
            let maskLayer = CAShapeLayer()
            maskLayer.path = path.cgPath
            layer.mask = maskLayer
        }
        
        if let borderValues = border.borderValues {
            borderLayer.path = path.cgPath
            borderLayer.fillColor = UIColor.clear.cgColor
            borderLayer.strokeColor = borderValues.color.cgColor
            borderLayer.lineWidth = borderValues.width
            borderLayer.frame = bounds
            layer.addSublayer(borderLayer)
        }
        
        appliedStyle = true
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        guard let roundCorners = roundCorners, let border = border else {
            return
        }
        applyFrameStyle(roundCorners: roundCorners, border: border)
    }
}