diff --git a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m index 0a5103725..ea817812b 100644 --- a/Signal/src/ViewControllers/ConversationView/ConversationViewController.m +++ b/Signal/src/ViewControllers/ConversationView/ConversationViewController.m @@ -1989,7 +1989,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { MediaDetailViewController *vc = [[MediaDetailViewController alloc] initWithAttachmentStream:attachmentStream fromRect:convertedRect viewItem:viewItem]; - [vc presentFromViewController:self]; + [vc presentFromViewController:self replacingView:imageView]; } - (void)didTapVideoViewItem:(ConversationViewItem *)viewItem @@ -2007,7 +2007,7 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) { MediaDetailViewController *vc = [[MediaDetailViewController alloc] initWithAttachmentStream:attachmentStream fromRect:convertedRect viewItem:viewItem]; - [vc presentFromViewController:self]; + [vc presentFromViewController:self replacingView:imageView]; } - (void)didTapAudioViewItem:(ConversationViewItem *)viewItem attachmentStream:(TSAttachmentStream *)attachmentStream diff --git a/Signal/src/ViewControllers/MediaDetailViewController.h b/Signal/src/ViewControllers/MediaDetailViewController.h index e93fa7e96..d9dd6808a 100644 --- a/Signal/src/ViewControllers/MediaDetailViewController.h +++ b/Signal/src/ViewControllers/MediaDetailViewController.h @@ -19,7 +19,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithAttachment:(SignalAttachment *)attachment fromRect:(CGRect)rect; -- (void)presentFromViewController:(UIViewController *)viewController; +- (void)presentFromViewController:(UIViewController *)viewController replacingView:(UIView *)view; @end diff --git a/Signal/src/ViewControllers/MediaDetailViewController.m b/Signal/src/ViewControllers/MediaDetailViewController.m index 468b7c2db..80cb4610c 100644 --- a/Signal/src/ViewControllers/MediaDetailViewController.m +++ b/Signal/src/ViewControllers/MediaDetailViewController.m @@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic) UIScrollView *scrollView; @property (nonatomic) UIView *mediaView; @property (nonatomic) UIView *presentationView; - +@property (nonatomic) UIView *replacingView; @property (nonatomic) UIButton *shareButton; @property (nonatomic) CGRect originRect; @@ -717,8 +717,9 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - Presentation -- (void)presentFromViewController:(UIViewController *)viewController +- (void)presentFromViewController:(UIViewController *)viewController replacingView:(UIView *)view; { + self.replacingView = view; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self]; // UIModalPresentationCustom retains the current view context behind our VC, allowing us to manually @@ -755,6 +756,7 @@ NS_ASSUME_NONNULL_BEGIN // 1. Fade in the entire view. [UIView animateWithDuration:0.1 animations:^{ + self.replacingView.alpha = 0.0; self.view.alpha = 1.0; }]; @@ -819,9 +821,9 @@ NS_ASSUME_NONNULL_BEGIN [self applyInitialMediaViewConstraints]; if (isAnimated) { - [UIView animateWithDuration:0.2 + [UIView animateWithDuration:0.18 delay:0.0 - options:UIViewAnimationOptionCurveEaseInOut + options:UIViewAnimationOptionCurveEaseOut animations:^(void) { [self.presentationView.superview layoutIfNeeded]; self.presentationView.layer.cornerRadius = OWSMessageCellCornerRadius; @@ -829,13 +831,26 @@ NS_ASSUME_NONNULL_BEGIN // In case user has hidden bars, which changes background to black. self.view.backgroundColor = UIColor.whiteColor; - // fade out content and toolbars - self.navigationController.view.alpha = 0.0; } - completion:^(BOOL finished) { - [self.presentingViewController dismissViewControllerAnimated:NO completion:completion]; - }]; + completion:nil]; + + [UIView animateWithDuration:0.1 + delay:0.15 + options:UIViewAnimationOptionCurveEaseInOut + animations:^(void) { + + OWSAssert(self.replacingView); + self.replacingView.alpha = 1.0; + + // fade out content and toolbars + self.navigationController.view.alpha = 0.0; + } + completion:^(BOOL finished) { + [self.presentingViewController dismissViewControllerAnimated:NO completion:completion]; + }]; + } else { + self.replacingView.alpha = 1.0; [self.presentingViewController dismissViewControllerAnimated:NO completion:completion]; } } diff --git a/Signal/src/ViewControllers/MediaMessageView.swift b/Signal/src/ViewControllers/MediaMessageView.swift index c909f0f70..319dc3fc2 100644 --- a/Signal/src/ViewControllers/MediaMessageView.swift +++ b/Signal/src/ViewControllers/MediaMessageView.swift @@ -456,6 +456,6 @@ class MediaMessageView: UIView, OWSAudioAttachmentPlayerDelegate { } }() - viewController.present(from:fromViewController) + viewController.present(from: fromViewController, replacing: fromView) } }