diff --git a/VideoTrim/Classes/VideoTrim.swift b/VideoTrim/Classes/VideoTrim.swift index 248144a..e43d402 100644 --- a/VideoTrim/Classes/VideoTrim.swift +++ b/VideoTrim/Classes/VideoTrim.swift @@ -877,6 +877,12 @@ open class VideoTrim: UIView { let maximumTime = CGFloat(trimMaximumDuration.value) / CGFloat(trimMaximumDuration.timescale) let makeTime = CGFloat(makeDuration.value) / CGFloat(makeDuration.timescale) if maximumTime < makeTime { + // Snap to the maximum allowed start point + let maxWidth = frameWidth * (maximumTime / (CGFloat(asset!.duration.value) / CGFloat(asset!.duration.timescale))) + let newLeading = frameWidth - maxWidth - abs(trailingConstraint?.constant ?? 0) + leadingConstraint?.constant = max(0, newLeading) + updateTotalTime() + updatePlayTime() return } } @@ -916,6 +922,12 @@ open class VideoTrim: UIView { let maximumTime = CGFloat(trimMaximumDuration.value) / CGFloat(trimMaximumDuration.timescale) let makeTime = CGFloat(makeDuration.value) / CGFloat(makeDuration.timescale) if maximumTime < makeTime { + // Snap to maximum allowed end point + let maxWidth = frameWidth * (maximumTime / (CGFloat(asset!.duration.value) / CGFloat(asset!.duration.timescale))) + let newTrailing = -(frameWidth - abs((leadingConstraint?.constant ?? 0)) - maxWidth) + trailingConstraint?.constant = min(0, newTrailing) + updateTotalTime() + updatePlayTime() return } } @@ -970,6 +982,21 @@ open class VideoTrim: UIView { let point = sender.location(in: frameContainerView) let constant = point.x let playTimeLineViewLeadingConstraint = frameContainerView.constraints.filter({ $0.identifier == "playTimeLineViewLeading" }).first + + if let leadingConstraint = frameContainerView.constraints.filter({ $0.identifier == "trimContainerViewLeading" }).first, let trailingConstraint = frameContainerView.constraints.filter({ $0.identifier == "trimContainerViewTrailing" }).first { + if leadingConstraint.constant > constant { + playTimeLineViewLeadingConstraint?.constant = leadingConstraint.constant + updatePlayTime() + delegate?.videoTrimPlayTimeChange(self) + return + } else if constant > frameWidth - abs(trailingConstraint.constant) - playLineWidth { + playTimeLineViewLeadingConstraint?.constant = frameWidth - abs(trailingConstraint.constant) - playLineWidth + updatePlayTime() + delegate?.videoTrimPlayTimeChange(self) + return + } + } + playTimeLineViewLeadingConstraint?.constant = constant + (playLineWidth / 2) updatePlayTime() delegate?.videoTrimPlayTimeChange(self)