Skip to content

Commit f1eca46

Browse files
author
Shahen Hovhannisyan
committed
fix(TrimmerView): Fixed frames
Fixed TrimmerVIew issue when only first frame being shown closes out #33
1 parent 1528103 commit f1eca46

5 files changed

Lines changed: 171 additions & 176 deletions

File tree

ios/.DS_Store

6 KB
Binary file not shown.

ios/RNVideoProcessing/.DS_Store

8 KB
Binary file not shown.
6 KB
Binary file not shown.

ios/RNVideoProcessing/RNTrimmerView/ICGVideoTrimmer/ICGVideoTrimmerView.m

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ - (CGFloat)thumbWidth
103103
- (void)resetSubviews
104104
{
105105
self.clipsToBounds = YES;
106-
106+
107107
[self setBackgroundColor:[UIColor blackColor]];
108-
108+
109109
[self.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
110110

111111
self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame))];
@@ -141,7 +141,7 @@ - (void)resetSubviews
141141

142142
// width for left and right overlay views
143143
self.overlayWidth = CGRectGetWidth(self.frame) - (self.minLength * self.widthPerSecond);
144-
144+
145145
// add left overlay view
146146
self.leftOverlayView = [[UIView alloc] initWithFrame:CGRectMake(self.thumbWidth - self.overlayWidth, 0, self.overlayWidth, CGRectGetHeight(self.frameView.frame))];
147147
CGRect leftThumbFrame = CGRectMake(self.overlayWidth-self.thumbWidth, 0, self.thumbWidth, CGRectGetHeight(self.frameView.frame));
@@ -156,15 +156,15 @@ - (void)resetSubviews
156156
self.trackerView.layer.masksToBounds = true;
157157
self.trackerView.layer.cornerRadius = 2;
158158
[self addSubview:self.trackerView];
159-
159+
160160
[self.leftThumbView.layer setMasksToBounds:YES];
161161
[self.leftOverlayView addSubview:self.leftThumbView];
162162
[self.leftOverlayView setUserInteractionEnabled:YES];
163163
UIPanGestureRecognizer *leftPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(moveLeftOverlayView:)];
164164
[self.leftOverlayView addGestureRecognizer:leftPanGestureRecognizer];
165165
[self.leftOverlayView setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.8]];
166166
[self addSubview:self.leftOverlayView];
167-
167+
168168
// add right overlay view
169169
CGFloat rightViewFrameX = CGRectGetWidth(self.frameView.frame) < CGRectGetWidth(self.frame) ? CGRectGetMaxX(self.frameView.frame) : CGRectGetWidth(self.frame) - self.thumbWidth;
170170
self.rightOverlayView = [[UIView alloc] initWithFrame:CGRectMake(rightViewFrameX, 0, self.overlayWidth, CGRectGetHeight(self.frameView.frame))];
@@ -267,7 +267,7 @@ - (void)moveRightOverlayView:(UIPanGestureRecognizer *)gesture
267267
}
268268

269269
- (void)seekToTime:(CGFloat) time
270-
{
270+
{
271271
CGFloat posToMove = time * self.widthPerSecond + self.thumbWidth - self.scrollView.contentOffset.x;
272272

273273
CGRect trackerFrame = self.trackerView.frame;
@@ -360,13 +360,8 @@ - (void)addFrames
360360
}
361361
tmp.frame = currentFrame;
362362

363-
dispatch_async(dispatch_get_main_queue(), ^{
364-
[self.frameView addSubview:tmp];
365-
});
366-
367-
363+
[self.frameView addSubview:tmp];
368364
}
369-
370365
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
371366
for (int i=1; i<=[times count]; i++) {
372367
CMTime time = [((NSValue *)[times objectAtIndex:i-1]) CMTimeValue];

ios/RNVideoProcessing/RNTrimmerView/RNTrimmerView.swift

Lines changed: 164 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -8,169 +8,169 @@ import AVKit
88

99
@objc(RNTrimmerView)
1010
class RNTrimmerView: RCTView, ICGVideoTrimmerDelegate {
11-
12-
var trimmerView: ICGVideoTrimmerView?
13-
var asset: AVAsset!
14-
var rect: CGRect = CGRect.zero
15-
var mThemeColor = UIColor.clear
16-
var bridge: RCTBridge!
17-
var onChange: RCTBubblingEventBlock?
18-
var _minLength: CGFloat? = nil
19-
var _maxLength: CGFloat? = nil
20-
var _trackerColor: UIColor = UIColor.clear
21-
22-
var source: NSString? {
23-
set {
24-
setSource(source: newValue)
25-
}
26-
get {
27-
28-
return nil
29-
}
30-
}
31-
32-
var height: NSNumber? {
33-
set {
34-
self.rect.size.height = RCTConvert.cgFloat(newValue)
35-
self.updateView()
36-
}
37-
get {
38-
return nil
39-
}
40-
}
41-
42-
var width: NSNumber? {
43-
set {
44-
self.rect.size.width = RCTConvert.cgFloat(newValue)
45-
self.updateView()
46-
}
47-
get {
48-
return nil
49-
}
50-
}
51-
52-
var themeColor: NSString? {
53-
set {
54-
if newValue != nil {
55-
let color = NumberFormatter().number(from: newValue! as String)
56-
self.mThemeColor = RCTConvert.uiColor(color)
57-
self.updateView()
58-
}
59-
}
60-
get {
61-
return nil
62-
}
63-
}
64-
65-
var maxLength: NSNumber? {
66-
set {
67-
if newValue != nil {
68-
self._maxLength = RCTConvert.cgFloat(newValue!)
69-
self.updateView()
70-
}
71-
}
72-
get {
73-
return nil
74-
}
75-
}
76-
77-
var minLength: NSNumber? {
78-
set {
79-
if newValue != nil {
80-
self._minLength = RCTConvert.cgFloat(newValue!)
81-
self.updateView()
82-
}
11+
12+
var trimmerView: ICGVideoTrimmerView?
13+
var asset: AVAsset!
14+
var rect: CGRect = CGRect.zero
15+
var mThemeColor = UIColor.clear
16+
var bridge: RCTBridge!
17+
var onChange: RCTBubblingEventBlock?
18+
var _minLength: CGFloat? = nil
19+
var _maxLength: CGFloat? = nil
20+
var _trackerColor: UIColor = UIColor.clear
21+
22+
var source: NSString? {
23+
set {
24+
setSource(source: newValue)
25+
}
26+
get {
27+
28+
return nil
29+
}
30+
}
31+
32+
var height: NSNumber? {
33+
set {
34+
self.rect.size.height = RCTConvert.cgFloat(newValue)
35+
self.updateView()
36+
}
37+
get {
38+
return nil
39+
}
40+
}
41+
42+
var width: NSNumber? {
43+
set {
44+
self.rect.size.width = RCTConvert.cgFloat(newValue)
45+
self.updateView()
46+
}
47+
get {
48+
return nil
49+
}
50+
}
51+
52+
var themeColor: NSString? {
53+
set {
54+
if newValue != nil {
55+
let color = NumberFormatter().number(from: newValue! as String)
56+
self.mThemeColor = RCTConvert.uiColor(color)
57+
self.updateView()
58+
}
59+
}
60+
get {
61+
return nil
62+
}
63+
}
64+
65+
var maxLength: NSNumber? {
66+
set {
67+
if newValue != nil {
68+
self._maxLength = RCTConvert.cgFloat(newValue!)
69+
self.updateView()
70+
}
71+
}
72+
get {
73+
return nil
74+
}
75+
}
76+
77+
var minLength: NSNumber? {
78+
set {
79+
if newValue != nil {
80+
self._minLength = RCTConvert.cgFloat(newValue!)
81+
self.updateView()
82+
}
83+
}
84+
get {
85+
return nil
86+
}
87+
}
88+
89+
var currentTime: NSNumber? {
90+
set {
91+
print("CHANGED: [TrimmerView]: currentTime: \(newValue)")
92+
if newValue != nil && self.trimmerView != nil {
93+
let convertedValue = newValue as! CGFloat
94+
self.trimmerView?.seek(toTime: convertedValue)
95+
// self.trimmerView
96+
}
97+
}
98+
get {
99+
return nil
100+
}
101+
}
102+
103+
var trackerColor: NSString? {
104+
set {
105+
if newValue == nil {
106+
return
107+
}
108+
if self.trimmerView == nil {
109+
return
110+
}
111+
let color = NumberFormatter().number(from: newValue! as String)
112+
let formattedColor = RCTConvert.uiColor(color)
113+
if formattedColor != nil {
114+
self._trackerColor = formattedColor!
115+
self.updateView()
116+
}
117+
}
118+
get {
119+
return nil
120+
}
121+
}
122+
123+
func updateView() {
124+
self.frame = rect
125+
if trimmerView != nil {
126+
trimmerView!.frame = rect
127+
trimmerView!.themeColor = self.mThemeColor
128+
trimmerView!.trackerColor = self._trackerColor
129+
trimmerView!.maxLength = _maxLength == nil ? CGFloat(self.asset.duration.seconds) : _maxLength!
130+
if _minLength != nil {
131+
trimmerView!.minLength = _minLength!
132+
}
133+
self.trimmerView!.resetSubviews()
134+
// Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(self.updateTrimmer), userInfo: nil, repeats: false)
135+
}
136+
}
137+
138+
func updateTrimmer() {
139+
self.trimmerView!.resetSubviews()
140+
}
141+
142+
func setSource(source: NSString?) {
143+
if source != nil {
144+
let pathToSource = NSURL(string: source! as String)
145+
self.asset = AVURLAsset(url: pathToSource as! URL, options: nil)
146+
147+
trimmerView = ICGVideoTrimmerView(frame: rect, asset: self.asset)
148+
trimmerView!.showsRulerView = false
149+
trimmerView!.hideTracker(false)
150+
trimmerView!.delegate = self
151+
trimmerView!.trackerColor = self._trackerColor
152+
self.addSubview(trimmerView!)
153+
self.updateView()
154+
}
155+
}
156+
157+
init(frame: CGRect, bridge: RCTBridge) {
158+
super.init(frame: frame)
159+
self.bridge = bridge
160+
}
161+
162+
required init?(coder aDecoder: NSCoder) {
163+
fatalError("init(coder:) has not been implemented")
164+
}
165+
166+
func onTrimmerPositionChange(startTime: CGFloat, endTime: CGFloat) {
167+
if self.onChange != nil {
168+
let event = ["startTime": startTime, "endTime": endTime]
169+
self.onChange!(event)
170+
}
171+
}
172+
173+
func trimmerView(_ trimmerView: ICGVideoTrimmerView, didChangeLeftPosition startTime: CGFloat, rightPosition endTime: CGFloat) {
174+
onTrimmerPositionChange(startTime: startTime, endTime: endTime)
83175
}
84-
get {
85-
return nil
86-
}
87-
}
88-
89-
var currentTime: NSNumber? {
90-
set {
91-
print("CHANGED: [TrimmerView]: currentTime: \(newValue)")
92-
if newValue != nil && self.trimmerView != nil {
93-
let convertedValue = newValue as! CGFloat
94-
self.trimmerView?.seek(toTime: convertedValue)
95-
// self.trimmerView
96-
}
97-
}
98-
get {
99-
return nil
100-
}
101-
}
102-
103-
var trackerColor: NSString? {
104-
set {
105-
if newValue == nil {
106-
return
107-
}
108-
if self.trimmerView == nil {
109-
return
110-
}
111-
let color = NumberFormatter().number(from: newValue! as String)
112-
let formattedColor = RCTConvert.uiColor(color)
113-
if formattedColor != nil {
114-
self._trackerColor = formattedColor!
115-
self.updateView()
116-
}
117-
}
118-
get {
119-
return nil
120-
}
121-
}
122-
123-
func updateView() {
124-
self.frame = rect
125-
if trimmerView != nil {
126-
trimmerView!.frame = rect
127-
trimmerView!.themeColor = self.mThemeColor
128-
trimmerView!.trackerColor = self._trackerColor
129-
trimmerView!.maxLength = _maxLength == nil ? CGFloat(self.asset.duration.seconds) : _maxLength!
130-
if _minLength != nil {
131-
trimmerView!.minLength = _minLength!
132-
}
133-
self.trimmerView!.resetSubviews()
134-
Timer.scheduledTimer(timeInterval: 0.5, target: self, selector: #selector(self.updateTrimmer), userInfo: nil, repeats: false)
135-
}
136-
}
137-
138-
func updateTrimmer() {
139-
self.trimmerView!.resetSubviews()
140-
}
141-
142-
func setSource(source: NSString?) {
143-
if source != nil {
144-
let pathToSource = NSURL(string: source! as String)
145-
self.asset = AVURLAsset(url: pathToSource as! URL, options: nil)
146-
147-
trimmerView = ICGVideoTrimmerView(frame: rect, asset: self.asset)
148-
trimmerView!.showsRulerView = false
149-
trimmerView!.hideTracker(false)
150-
trimmerView!.delegate = self
151-
trimmerView!.trackerColor = self._trackerColor
152-
self.addSubview(trimmerView!)
153-
self.updateView()
154-
}
155-
}
156-
157-
init(frame: CGRect, bridge: RCTBridge) {
158-
super.init(frame: frame)
159-
self.bridge = bridge
160-
}
161-
162-
required init?(coder aDecoder: NSCoder) {
163-
fatalError("init(coder:) has not been implemented")
164-
}
165-
166-
func onTrimmerPositionChange(startTime: CGFloat, endTime: CGFloat) {
167-
if self.onChange != nil {
168-
let event = ["startTime": startTime, "endTime": endTime]
169-
self.onChange!(event)
170-
}
171-
}
172-
173-
func trimmerView(_ trimmerView: ICGVideoTrimmerView, didChangeLeftPosition startTime: CGFloat, rightPosition endTime: CGFloat) {
174-
onTrimmerPositionChange(startTime: startTime, endTime: endTime)
175-
}
176176
}

0 commit comments

Comments
 (0)