diff --git a/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift b/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift index c168cf8100..c5bff678c3 100644 --- a/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift +++ b/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift @@ -878,6 +878,7 @@ public class CameraScreen: ViewController { self.effectivePreviewView.addGestureRecognizer(pinchGestureRecognizer) let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.handlePan(_:))) + panGestureRecognizer.maximumNumberOfTouches = 1 self.effectivePreviewView.addGestureRecognizer(panGestureRecognizer) let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:))) diff --git a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorRenderer.swift b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorRenderer.swift index 0913d42820..dbc34f57d1 100644 --- a/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorRenderer.swift +++ b/submodules/TelegramUI/Components/MediaEditor/Sources/MediaEditorRenderer.swift @@ -221,7 +221,7 @@ final class MediaEditorRenderer: TextureConsumer { if let onNextRender = self.onNextRender { self.onNextRender = nil - Queue.mainQueue().async { + Queue.mainQueue().after(0.1) { onNextRender() } } diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift index 9f182499d4..3b1e0b40de 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/MediaEditorScreen.swift @@ -702,7 +702,7 @@ final class MediaEditorScreenComponent: Component { case 86400: timeoutValue = "24" case 172800: - timeoutValue = "2d" + timeoutValue = "48" default: timeoutValue = "24" } @@ -1640,8 +1640,10 @@ public final class MediaEditorScreen: ViewController { self.mediaEditor?.onFirstDisplay = { [weak self] in if let self, let transitionInView = self.transitionInView { - transitionInView.removeFromSuperview() self.transitionInView = nil + transitionInView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak transitionInView] _ in + transitionInView?.removeFromSuperview() + }) } } } @@ -2502,7 +2504,7 @@ public final class MediaEditorScreen: ViewController { updateTimeout(86400, false) }))) - items.append(.action(ContextMenuActionItem(text: "2 Days", icon: { theme in + items.append(.action(ContextMenuActionItem(text: "48 Hours", icon: { theme in return currentValue == 86400 * 2 ? generateTintedImage(image: UIImage(bundleImageName: "Chat/Context Menu/Check"), color: theme.contextMenu.primaryColor) : nil }, action: { _, a in a(.default) diff --git a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/VideoScrubberComponent.swift b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/VideoScrubberComponent.swift index 8bab798564..5852caa200 100644 --- a/submodules/TelegramUI/Components/MediaEditorScreen/Sources/VideoScrubberComponent.swift +++ b/submodules/TelegramUI/Components/MediaEditorScreen/Sources/VideoScrubberComponent.swift @@ -132,7 +132,7 @@ final class VideoScrubberComponent: Component { private var isPanningPositionHandle = false private var displayLink: SharedDisplayLinkDriver.Link? - private var positionAnimation: (start: Double, from: Double, to: Double)? + private var positionAnimation: (start: Double, from: Double, to: Double, ended: Bool)? override init(frame: CGRect) { super.init(frame: frame) @@ -343,12 +343,12 @@ final class VideoScrubberComponent: Component { let timestamp = CACurrentMediaTime() let updatedPosition: Double - if let (start, from, to) = self.positionAnimation { + if let (start, from, to, _) = self.positionAnimation { let duration = to - from let fraction = duration > 0.0 ? (timestamp - start) / duration : 0.0 updatedPosition = max(component.startPosition, min(component.endPosition, from + (to - from) * fraction)) if fraction >= 1.0 { - self.positionAnimation = (timestamp, component.startPosition, component.endPosition) + self.positionAnimation = (start, from, to, true) } } else { let advance = component.isPlaying ? timestamp - component.generationTimestamp : 0.0 @@ -419,8 +419,12 @@ final class VideoScrubberComponent: Component { self.displayLink?.isPaused = true transition.setFrame(view: self.cursorView, frame: cursorFrame(size: scrubberSize, position: component.position, duration: component.duration)) } else { - if self.positionAnimation == nil { - self.positionAnimation = (CACurrentMediaTime(), component.position, component.endPosition) + if let (_, _, end, ended) = self.positionAnimation { + if ended, component.position >= component.startPosition && component.position < end - 1.0 { + self.positionAnimation = (CACurrentMediaTime(), component.position, component.endPosition, false) + } + } else { + self.positionAnimation = (CACurrentMediaTime(), component.position, component.endPosition, false) } self.displayLink?.isPaused = false self.updateCursorPosition()