diff --git a/submodules/TelegramUI/Components/CameraButtonComponent/Sources/CameraButtonComponent.swift b/submodules/TelegramUI/Components/CameraButtonComponent/Sources/CameraButtonComponent.swift index a2435d4512..5dc55bc046 100644 --- a/submodules/TelegramUI/Components/CameraButtonComponent/Sources/CameraButtonComponent.swift +++ b/submodules/TelegramUI/Components/CameraButtonComponent/Sources/CameraButtonComponent.swift @@ -124,12 +124,21 @@ public final class CameraButton: Component { func update(component: CameraButton, availableSize: CGSize, state: EmptyComponentState, environment: Environment, transition: Transition) -> CGSize { if let currentId = self.component?.content.id, currentId != component.content.id { - self.contentView.removeFromSuperview() + let previousContentView = self.contentView self.contentView = ComponentHostView() self.contentView.isUserInteractionEnabled = false self.contentView.layer.allowsGroupOpacity = true self.addSubview(self.contentView) + + if transition.animation.isImmediate { + previousContentView.removeFromSuperview() + } else { + self.addSubview(previousContentView) + previousContentView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.2, removeOnCompletion: false, completion: { [weak previousContentView] _ in + previousContentView?.removeFromSuperview() + }) + } } let contentSize = self.contentView.update( transition: transition, diff --git a/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift b/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift index 17767554d5..5f110d3fd9 100644 --- a/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift +++ b/submodules/TelegramUI/Components/CameraScreen/Sources/CameraScreen.swift @@ -1923,8 +1923,11 @@ public class CameraScreen: ViewController { } } }, dismissed: { [weak self] in - self?.node.hasGallery = false resumeCameraCapture() + if let self { + self.node.hasGallery = false + self.node.requestUpdateLayout(hasAppeared: self.node.hasAppeared, transition: .immediate) + } }) self.galleryController = controller } diff --git a/submodules/TelegramUI/Components/CameraScreen/Sources/CaptureControlsComponent.swift b/submodules/TelegramUI/Components/CameraScreen/Sources/CaptureControlsComponent.swift index 06d3a04303..92be146087 100644 --- a/submodules/TelegramUI/Components/CameraScreen/Sources/CaptureControlsComponent.swift +++ b/submodules/TelegramUI/Components/CameraScreen/Sources/CaptureControlsComponent.swift @@ -516,7 +516,9 @@ final class CaptureControlsComponent: Component { var lastGalleryAsset: PHAsset? { didSet { if self.cachedAssetImage?.0 != self.lastGalleryAsset?.localIdentifier { - self.cachedAssetImage = nil + if self.cachedAssetImage?.0 != "" { + self.cachedAssetImage = nil + } if let lastGalleryAsset = self.lastGalleryAsset { self.assetDisposable.set((fetchPhotoLibraryImage(localIdentifier: lastGalleryAsset.localIdentifier, thumbnail: true) |> deliverOnMainQueue).start(next: { [weak self] imageAndDegraded in @@ -890,12 +892,18 @@ final class CaptureControlsComponent: Component { gallerySize = CGSize(width: 50.0, height: 50.0) galleryCornerRadius = 10.0 } + let galleryButtonId: String + if let (identifier, _) = state.cachedAssetImage, identifier == "" { + galleryButtonId = "placeholder" + } else { + galleryButtonId = "gallery" + } let galleryButtonSize = self.galleryButtonView.update( - transition: .immediate, + transition: transition, component: AnyComponent( CameraButton( content: AnyComponentWithIdentity( - id: "gallery", + id: galleryButtonId, component: AnyComponent( Image( image: state.cachedAssetImage?.1,