diff --git a/ICGVideoTrimmer/Base.lproj/Main.storyboard b/ICGVideoTrimmer/Base.lproj/Main.storyboard index 5547bb7..dd69db0 100644 --- a/ICGVideoTrimmer/Base.lproj/Main.storyboard +++ b/ICGVideoTrimmer/Base.lproj/Main.storyboard @@ -1,8 +1,9 @@ - - + + - + + @@ -17,16 +18,14 @@ - - + + - - - - + + + - @@ -35,62 +34,76 @@ - - - - + + + - - + - - + - + + + + + diff --git a/ICGVideoTrimmer/ViewController.m b/ICGVideoTrimmer/ViewController.m index cd91a3e..d49b24a 100644 --- a/ICGVideoTrimmer/ViewController.m +++ b/ICGVideoTrimmer/ViewController.m @@ -22,6 +22,8 @@ @interface ViewController () 0) + startTime = [alert.textFields.firstObject.text doubleValue]; + if([endTimeString length]>0) + endTime = [alert.textFields.lastObject.text doubleValue]; + + [_trimmerView setVideoBoundsToStartTime:startTime endTime:endTime]; + + + }]; + + UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]; + + [alert addAction:changeAction]; + [alert addAction:cancelAction]; + [self presentViewController:alert animated:YES completion:nil]; + +} + + - (void)video:(NSString*)videoPath didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo { if (error) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Video Saving Failed" diff --git a/Source/ICGVideoTrimmerView.h b/Source/ICGVideoTrimmerView.h index 70b7eea..30116ba 100644 --- a/Source/ICGVideoTrimmerView.h +++ b/Source/ICGVideoTrimmerView.h @@ -64,6 +64,9 @@ NS_ASSUME_NONNULL_BEGIN - (void)hideTracker:(BOOL)flag; +-(void)setVideoBoundsToStartTime:(CGFloat)startTime endTime:(CGFloat)endTime; + + @end NS_ASSUME_NONNULL_END diff --git a/Source/ICGVideoTrimmerView.m b/Source/ICGVideoTrimmerView.m index fc15a32..089acc4 100644 --- a/Source/ICGVideoTrimmerView.m +++ b/Source/ICGVideoTrimmerView.m @@ -368,6 +368,68 @@ - (void)hideTracker:(BOOL)flag } } +-(void)setVideoBoundsToStartTime:(CGFloat)startTime endTime:(CGFloat)endTime +{ + //Validating the inputs. + if(startTime < 0 || endTime < 0 || startTime>=endTime || endTime>CMTimeGetSeconds([self.asset duration]) || (endTime-startTime)self.maxLength) + return; + + + float newLeftOverlayViewMidX = [self getMiddleXPointForLeftOverlayViewWithTime:startTime]; + self.leftOverlayView.center = CGPointMake(newLeftOverlayViewMidX, self.leftOverlayView.center.y); + + float newRightOverlayVideMidX = [self getMiddleXPointForRightOverlayViewWithTime:endTime]; + self.rightOverlayView.center = CGPointMake(newRightOverlayVideMidX, self.rightOverlayView.center.y); + + [self notifyDelegateOfDidChange]; +} + + +-(float)getMiddleXPointForLeftOverlayViewWithTime:(float)time +{ + CGFloat leftOverlayViewNewX = ((((self.scrollView.contentOffset.x -self.thumbWidth) / self.widthPerSecond) - time)* self.widthPerSecond)*-1 ; + + CGFloat leftOverlayViewOldX = CGRectGetMaxX(self.leftOverlayView.frame); + + int deltaX = leftOverlayViewNewX-leftOverlayViewOldX; + CGPoint center = _leftOverlayView.center; + + CGFloat newLeftViewMidX = center.x += deltaX;; + CGFloat maxWidth = CGRectGetMinX(_rightOverlayView.frame) - (_minLength * _widthPerSecond); + CGFloat newLeftViewMinX = newLeftViewMidX - _overlayWidth/2; + if (newLeftViewMinX < _thumbWidth - _overlayWidth) { + newLeftViewMidX = _thumbWidth - _overlayWidth + _overlayWidth/2; + } else if (newLeftViewMinX + _overlayWidth > maxWidth) { + newLeftViewMidX = maxWidth - _overlayWidth / 2; + } + if (!self.trackerView.hidden && time != self.startTime) { + [self seekToTime:time]; + } + return newLeftViewMidX; + +} +-(float)getMiddleXPointForRightOverlayViewWithTime:(float)time +{ + CGFloat rightOverlayViewNewX = ((((self.scrollView.contentOffset.x -self.thumbWidth) / self.widthPerSecond) - time)* self.widthPerSecond)*-1 ; + + CGFloat rightOverlayViewOldX = CGRectGetMinX(self.rightOverlayView.frame); + + int rightDeltaX = rightOverlayViewNewX - rightOverlayViewOldX; + + CGPoint rightCenter = self.rightOverlayView.center; + + CGFloat newRightViewMidX = rightCenter.x += rightDeltaX; + CGFloat minX = CGRectGetMaxX(self.leftOverlayView.frame) + self.minLength * self.widthPerSecond; + CGFloat maxX = CMTimeGetSeconds([self.asset duration]) <= self.maxLength + 0.5 ? CGRectGetMaxX(self.frameView.frame) : CGRectGetWidth(self.frame) - self.thumbWidth; + if (newRightViewMidX - self.overlayWidth/2 < minX) { + newRightViewMidX = minX + self.overlayWidth/2; + } else if (newRightViewMidX - self.overlayWidth/2 > maxX) { + newRightViewMidX = maxX + self.overlayWidth/2; + } + + return newRightViewMidX; +} + - (void)notifyDelegateOfDidChange { NSLog(@"leftOverlayView:%f , rightOverlayView:%f contentOffset.x:%@", CGRectGetMaxX(self.leftOverlayView.frame) , CGRectGetMaxX(self.rightOverlayView.frame) , @(self.scrollView.contentOffset.x));