UIView+CNLiveExtensions.swift
1.92 KB
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
//
// UIView+CNGradient.swift
// metaCode
//
// Created by open on 2023/6/5.
//
import Foundation
extension UIView {
private struct gradientLayerStr {
static var gradient:String! = "kGradientLayer"
}
@discardableResult
func setGradient(colors: [UIColor], startPoint: CGPoint, endPoint: CGPoint) -> CAGradientLayer {
func setGradient(_ layer: CAGradientLayer) {
self.layoutIfNeeded()
var colorArr = [CGColor]()
for color in colors {
colorArr.append(color.cgColor)
}
CATransaction.begin()
CATransaction.setDisableActions(true)
layer.frame = self.bounds
CATransaction.commit()
layer.colors = colorArr
layer.startPoint = startPoint
layer.endPoint = endPoint
}
if let gradientLayer = objc_getAssociatedObject(self, &gradientLayerStr.gradient) as? CAGradientLayer {
setGradient(gradientLayer)
return gradientLayer
} else {
let gradientLayer = CAGradientLayer()
self.layer.insertSublayer(gradientLayer, at: 0)
setGradient(gradientLayer)
objc_setAssociatedObject(self, &gradientLayerStr.gradient, gradientLayer, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
return gradientLayer
}
}
/// 设置不同角度的圆角剪切
/// - Parameters:
/// - conrners: 剪切方向
/// - radius: 剪切角度
func addCorner(conrners: UIRectCorner, radius: CGFloat) {
self.layoutIfNeeded()
let maskPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: conrners, cornerRadii: CGSize(width: radius, height: radius))
let maskLayer = CAShapeLayer()
maskLayer.frame = self.bounds
maskLayer.path = maskPath.cgPath
self.layer.mask = maskLayer
}
}