react-native-video-trim 5.0.5 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VideoTrim.podspec +1 -1
- package/ios/AssetLoader.swift +99 -0
- package/ios/ErrorCode.swift +17 -0
- package/ios/ProgressAlertController.swift +100 -0
- package/ios/VideoTrim-Bridging-Header.h +1 -0
- package/ios/VideoTrim.h +2 -28
- package/ios/VideoTrim.mm +156 -639
- package/ios/VideoTrim.swift +946 -0
- package/ios/VideoTrimProtocol.swift +10 -0
- package/ios/VideoTrimmer.swift +872 -0
- package/ios/VideoTrimmerThumb.swift +175 -0
- package/ios/VideoTrimmerViewController.swift +578 -0
- package/package.json +1 -1
- package/ios/AssetLoader.h +0 -19
- package/ios/AssetLoader.mm +0 -87
- package/ios/ErrorCode.h +0 -9
- package/ios/ProgressAlertController.h +0 -12
- package/ios/ProgressAlertController.mm +0 -106
- package/ios/VideoTrimmer.h +0 -67
- package/ios/VideoTrimmer.mm +0 -863
- package/ios/VideoTrimmerThumb.h +0 -23
- package/ios/VideoTrimmerThumb.mm +0 -175
- package/ios/VideoTrimmerViewController.h +0 -52
- package/ios/VideoTrimmerViewController.mm +0 -533
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
//
|
|
2
|
+
// VideoTrimmerThumb.swift
|
|
3
|
+
// VideoTrim
|
|
4
|
+
//
|
|
5
|
+
// Created by Duc Trung Mai on 20/5/25.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import UIKit
|
|
9
|
+
|
|
10
|
+
@available(iOS 13.0, *)
|
|
11
|
+
class VideoTrimmerThumb: UIView {
|
|
12
|
+
private var isActive = false
|
|
13
|
+
|
|
14
|
+
private let leadingChevronImageView: UIImageView = {
|
|
15
|
+
let imageView = UIImageView(image: UIImage(systemName: "chevron.compact.left"))
|
|
16
|
+
imageView.contentMode = .scaleAspectFill
|
|
17
|
+
imageView.tintColor = .black
|
|
18
|
+
imageView.tintAdjustmentMode = .normal
|
|
19
|
+
imageView.translatesAutoresizingMaskIntoConstraints = false
|
|
20
|
+
return imageView
|
|
21
|
+
}()
|
|
22
|
+
|
|
23
|
+
private let trailingChevronView: UIImageView = {
|
|
24
|
+
let imageView = UIImageView(image: UIImage(systemName: "chevron.compact.right"))
|
|
25
|
+
imageView.contentMode = .scaleAspectFill
|
|
26
|
+
imageView.tintColor = .black
|
|
27
|
+
imageView.tintAdjustmentMode = .normal
|
|
28
|
+
imageView.translatesAutoresizingMaskIntoConstraints = false
|
|
29
|
+
return imageView
|
|
30
|
+
}()
|
|
31
|
+
|
|
32
|
+
private let wrapperView: UIView = {
|
|
33
|
+
let view = UIView()
|
|
34
|
+
view.translatesAutoresizingMaskIntoConstraints = false
|
|
35
|
+
return view
|
|
36
|
+
}()
|
|
37
|
+
|
|
38
|
+
private let leadingView: UIView = {
|
|
39
|
+
let view = UIView()
|
|
40
|
+
view.layer.cornerRadius = 6
|
|
41
|
+
view.layer.cornerCurve = .continuous
|
|
42
|
+
view.layer.maskedCorners = [.layerMinXMaxYCorner, .layerMinXMinYCorner]
|
|
43
|
+
view.translatesAutoresizingMaskIntoConstraints = false
|
|
44
|
+
return view
|
|
45
|
+
}()
|
|
46
|
+
|
|
47
|
+
private let trailingView: UIView = {
|
|
48
|
+
let view = UIView()
|
|
49
|
+
view.layer.cornerRadius = 6
|
|
50
|
+
view.layer.cornerCurve = .continuous
|
|
51
|
+
view.layer.maskedCorners = [.layerMaxXMaxYCorner, .layerMaxXMinYCorner]
|
|
52
|
+
view.translatesAutoresizingMaskIntoConstraints = false
|
|
53
|
+
return view
|
|
54
|
+
}()
|
|
55
|
+
|
|
56
|
+
private let topView: UIView = {
|
|
57
|
+
let view = UIView()
|
|
58
|
+
view.translatesAutoresizingMaskIntoConstraints = false
|
|
59
|
+
return view
|
|
60
|
+
}()
|
|
61
|
+
|
|
62
|
+
private let bottomView: UIView = {
|
|
63
|
+
let view = UIView()
|
|
64
|
+
view.translatesAutoresizingMaskIntoConstraints = false
|
|
65
|
+
return view
|
|
66
|
+
}()
|
|
67
|
+
|
|
68
|
+
let leadingGrabber: UIControl = {
|
|
69
|
+
let control = UIControl()
|
|
70
|
+
control.translatesAutoresizingMaskIntoConstraints = false
|
|
71
|
+
return control
|
|
72
|
+
}()
|
|
73
|
+
|
|
74
|
+
let trailingGrabber: UIControl = {
|
|
75
|
+
let control = UIControl()
|
|
76
|
+
control.translatesAutoresizingMaskIntoConstraints = false
|
|
77
|
+
return control
|
|
78
|
+
}()
|
|
79
|
+
|
|
80
|
+
let chevronWidth: CGFloat = 16
|
|
81
|
+
let edgeHeight: CGFloat = 4
|
|
82
|
+
|
|
83
|
+
override init(frame: CGRect) {
|
|
84
|
+
super.init(frame: frame)
|
|
85
|
+
setup()
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
required init?(coder: NSCoder) {
|
|
89
|
+
super.init(coder: coder)
|
|
90
|
+
setup()
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private func setup() {
|
|
94
|
+
leadingView.addSubview(leadingChevronImageView)
|
|
95
|
+
trailingView.addSubview(trailingChevronView)
|
|
96
|
+
|
|
97
|
+
wrapperView.addSubview(leadingView)
|
|
98
|
+
wrapperView.addSubview(trailingView)
|
|
99
|
+
wrapperView.addSubview(topView)
|
|
100
|
+
wrapperView.addSubview(bottomView)
|
|
101
|
+
addSubview(wrapperView)
|
|
102
|
+
|
|
103
|
+
wrapperView.addSubview(leadingGrabber)
|
|
104
|
+
wrapperView.addSubview(trailingGrabber)
|
|
105
|
+
|
|
106
|
+
setupConstraints()
|
|
107
|
+
updateColor()
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private func setupConstraints() {
|
|
111
|
+
NSLayoutConstraint.activate([
|
|
112
|
+
// Wrapper view constraints
|
|
113
|
+
wrapperView.topAnchor.constraint(equalTo: self.topAnchor),
|
|
114
|
+
wrapperView.bottomAnchor.constraint(equalTo: self.bottomAnchor),
|
|
115
|
+
wrapperView.leadingAnchor.constraint(equalTo: self.leadingAnchor),
|
|
116
|
+
wrapperView.trailingAnchor.constraint(equalTo: self.trailingAnchor),
|
|
117
|
+
|
|
118
|
+
// Leading view constraints
|
|
119
|
+
leadingView.topAnchor.constraint(equalTo: wrapperView.topAnchor),
|
|
120
|
+
leadingView.bottomAnchor.constraint(equalTo: wrapperView.bottomAnchor),
|
|
121
|
+
leadingView.leadingAnchor.constraint(equalTo: wrapperView.leadingAnchor),
|
|
122
|
+
leadingView.widthAnchor.constraint(equalToConstant: chevronWidth),
|
|
123
|
+
|
|
124
|
+
// Trailing view constraints
|
|
125
|
+
trailingView.topAnchor.constraint(equalTo: wrapperView.topAnchor),
|
|
126
|
+
trailingView.bottomAnchor.constraint(equalTo: wrapperView.bottomAnchor),
|
|
127
|
+
trailingView.trailingAnchor.constraint(equalTo: wrapperView.trailingAnchor),
|
|
128
|
+
trailingView.widthAnchor.constraint(equalToConstant: chevronWidth),
|
|
129
|
+
|
|
130
|
+
// Top view constraints
|
|
131
|
+
topView.topAnchor.constraint(equalTo: wrapperView.topAnchor),
|
|
132
|
+
topView.leadingAnchor.constraint(equalTo: leadingView.trailingAnchor),
|
|
133
|
+
topView.trailingAnchor.constraint(equalTo: trailingView.leadingAnchor),
|
|
134
|
+
topView.heightAnchor.constraint(equalToConstant: edgeHeight),
|
|
135
|
+
|
|
136
|
+
// Bottom view constraints
|
|
137
|
+
bottomView.bottomAnchor.constraint(equalTo: wrapperView.bottomAnchor),
|
|
138
|
+
bottomView.leadingAnchor.constraint(equalTo: leadingView.trailingAnchor),
|
|
139
|
+
bottomView.trailingAnchor.constraint(equalTo: trailingView.leadingAnchor),
|
|
140
|
+
bottomView.heightAnchor.constraint(equalToConstant: edgeHeight),
|
|
141
|
+
|
|
142
|
+
// Leading Chevron ImageView constraints
|
|
143
|
+
leadingChevronImageView.topAnchor.constraint(equalTo: leadingView.topAnchor, constant: 8),
|
|
144
|
+
leadingChevronImageView.bottomAnchor.constraint(equalTo: leadingView.bottomAnchor, constant: -8),
|
|
145
|
+
leadingChevronImageView.leadingAnchor.constraint(equalTo: leadingView.leadingAnchor, constant: 2),
|
|
146
|
+
leadingChevronImageView.trailingAnchor.constraint(equalTo: leadingView.trailingAnchor, constant: -2),
|
|
147
|
+
|
|
148
|
+
// Trailing Chevron ImageView constraints
|
|
149
|
+
trailingChevronView.topAnchor.constraint(equalTo: trailingView.topAnchor, constant: 8),
|
|
150
|
+
trailingChevronView.bottomAnchor.constraint(equalTo: trailingView.bottomAnchor, constant: -8),
|
|
151
|
+
trailingChevronView.leadingAnchor.constraint(equalTo: trailingView.leadingAnchor, constant: 2),
|
|
152
|
+
trailingChevronView.trailingAnchor.constraint(equalTo: trailingView.trailingAnchor, constant: -2),
|
|
153
|
+
|
|
154
|
+
// Leading Grabber constraints
|
|
155
|
+
leadingGrabber.topAnchor.constraint(equalTo: leadingView.topAnchor),
|
|
156
|
+
leadingGrabber.bottomAnchor.constraint(equalTo: leadingView.bottomAnchor),
|
|
157
|
+
leadingGrabber.leadingAnchor.constraint(equalTo: leadingView.leadingAnchor),
|
|
158
|
+
leadingGrabber.trailingAnchor.constraint(equalTo: leadingView.trailingAnchor),
|
|
159
|
+
|
|
160
|
+
// Trailing Grabber constraints
|
|
161
|
+
trailingGrabber.topAnchor.constraint(equalTo: trailingView.topAnchor),
|
|
162
|
+
trailingGrabber.bottomAnchor.constraint(equalTo: trailingView.bottomAnchor),
|
|
163
|
+
trailingGrabber.leadingAnchor.constraint(equalTo: trailingView.leadingAnchor),
|
|
164
|
+
trailingGrabber.trailingAnchor.constraint(equalTo: trailingView.trailingAnchor)
|
|
165
|
+
])
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private func updateColor() {
|
|
169
|
+
let color = UIColor.systemYellow
|
|
170
|
+
leadingView.backgroundColor = color
|
|
171
|
+
trailingView.backgroundColor = color
|
|
172
|
+
topView.backgroundColor = color
|
|
173
|
+
bottomView.backgroundColor = color
|
|
174
|
+
}
|
|
175
|
+
}
|