From a467cd8702b1248813d13a507288073ba17fa17d Mon Sep 17 00:00:00 2001 From: nixzhu Date: Wed, 29 Jul 2015 16:13:12 +0800 Subject: [PATCH 1/3] use crossover effect when Preview --- Yep/Extensions/NSFileManager+Yep.swift | 2 +- Yep/Realm/Models.swift | 16 ++++++++ ...ePreviewNavigationControllerDelegate.swift | 37 ++++++++++++++++--- .../ConversationViewController.swift | 1 + 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/Yep/Extensions/NSFileManager+Yep.swift b/Yep/Extensions/NSFileManager+Yep.swift index d320e38f..de2cfafe 100644 --- a/Yep/Extensions/NSFileManager+Yep.swift +++ b/Yep/Extensions/NSFileManager+Yep.swift @@ -71,7 +71,7 @@ extension NSFileManager { } // Image - + class func yepMessageImageURLWithName(name: String) -> NSURL? { if let messageCachesURL = yepMessageCachesURL() { diff --git a/Yep/Realm/Models.swift b/Yep/Realm/Models.swift index d3c10ebf..0f2e81d0 100644 --- a/Yep/Realm/Models.swift +++ b/Yep/Realm/Models.swift @@ -238,6 +238,22 @@ class Message: Object { dynamic var thumbnailURLString: String = "" dynamic var localThumbnailName: String = "" + var thumbnailImage: UIImage? { + switch mediaType { + case MessageMediaType.Image.rawValue: + if let imageFileURL = NSFileManager.yepMessageImageURLWithName(localAttachmentName) { + return UIImage(contentsOfFile: imageFileURL.path!) + } + case MessageMediaType.Video.rawValue: + if let imageFileURL = NSFileManager.yepMessageImageURLWithName(localThumbnailName) { + return UIImage(contentsOfFile: imageFileURL.path!) + } + default: + return nil + } + return nil + } + dynamic var downloadState: Int = MessageDownloadState.NoDownload.rawValue dynamic var mediaMetaData: MediaMetaData? diff --git a/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift b/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift index 98329ec5..a77b1203 100644 --- a/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift +++ b/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift @@ -37,6 +37,18 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga var snapshot: UIView? var frame = CGRectZero + + var thumbnailImage: UIImage? { + willSet { + let imageView = UIImageView() + imageView.contentMode = .ScaleAspectFit + imageView.image = newValue + imageView.alpha = 0 + thumbnailImageView = imageView + } + } + var thumbnailImageView: UIImageView? + var transitionView: UIView? { didSet { if let transitionView = transitionView { @@ -51,6 +63,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga var transitionContext: UIViewControllerContextTransitioning? func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { +// return 2 return isPresentation ? 0.35 : 0.35 } @@ -98,7 +111,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga let animatingVC = toVC! let animatingView = toView! - if let transitionViewSnapshot = transitionViewSnapshot { + if let transitionViewSnapshot = transitionViewSnapshot, thumbnailImageView = thumbnailImageView { animatingVC.view.backgroundColor = UIColor.clearColor() animatingVC.mediaView.alpha = 0 @@ -108,6 +121,9 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga transitionViewSnapshot.frame = frame animatingView.addSubview(transitionViewSnapshot) + thumbnailImageView.frame = frame + animatingView.addSubview(thumbnailImageView) + snapshot?.alpha = 1 @@ -130,7 +146,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga // transitionViewSnapshot.center = animatingView.center // }) - UIView.addKeyframeWithRelativeStartTime(0.4, relativeDuration: 0.5, animations: { () -> Void in + UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.9, animations: { () -> Void in let targetWidth = animatingView.bounds.width + self.largerOffset let dw = targetWidth - transitionViewSnapshot.bounds.width @@ -142,9 +158,15 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga transitionViewSnapshot.frame = frame transitionViewSnapshot.center = animatingView.center + + thumbnailImageView.frame = frame + thumbnailImageView.center = animatingView.center + + transitionViewSnapshot.alpha = 0 + thumbnailImageView.alpha = 1 }) - UIView.addKeyframeWithRelativeStartTime(0.9, relativeDuration: 0.0, animations: { () -> Void in + UIView.addKeyframeWithRelativeStartTime(0.9, relativeDuration: 0.1, animations: { () -> Void in // let ratio = (animatingView.bounds.width + self.largerOffset) / animatingView.bounds.width // animatingVC.mediaView.transform = CGAffineTransformMakeScale(ratio, ratio) animatingVC.mediaView.alpha = 1 @@ -194,7 +216,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga let fullDuration = transitionDuration(transitionContext) - if let transitionViewSnapshot = transitionViewSnapshot { + if let transitionViewSnapshot = transitionViewSnapshot, thumbnailImageView = thumbnailImageView { self.transitionView?.alpha = 0 @@ -213,12 +235,17 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga UIView.addKeyframeWithRelativeStartTime(0.2, relativeDuration: 0.0, animations: { () -> Void in animatingView.addSubview(transitionViewSnapshot) // transitionViewSnapshot.center = animatingView.center - transitionViewSnapshot.alpha = 1 + transitionViewSnapshot.alpha = 0 + thumbnailImageView.alpha = 1 animatingVC.mediaView.alpha = 0 }) UIView.addKeyframeWithRelativeStartTime(0.2, relativeDuration: 0.6, animations: { () -> Void in transitionViewSnapshot.frame = self.frame + thumbnailImageView.frame = self.frame + + transitionViewSnapshot.alpha = 1 + thumbnailImageView.alpha = 0 }) diff --git a/Yep/ViewControllers/Conversation/ConversationViewController.swift b/Yep/ViewControllers/Conversation/ConversationViewController.swift index 92e0be2e..9281f172 100644 --- a/Yep/ViewControllers/Conversation/ConversationViewController.swift +++ b/Yep/ViewControllers/Conversation/ConversationViewController.swift @@ -1526,6 +1526,7 @@ class ConversationViewController: BaseViewController { let delegate = ConversationMessagePreviewNavigationControllerDelegate() delegate.snapshot = UIScreen.mainScreen().snapshotViewAfterScreenUpdates(false) delegate.frame = frame + delegate.thumbnailImage = message.thumbnailImage delegate.transitionView = transitionView navigationControllerDelegate = delegate From 8616da8d02298003da7d7007902ba5f01c245160 Mon Sep 17 00:00:00 2001 From: nixzhu Date: Wed, 29 Jul 2015 16:30:49 +0800 Subject: [PATCH 2/3] detail of crossover --- ...onMessagePreviewNavigationControllerDelegate.swift | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift b/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift index a77b1203..0f7ba6e8 100644 --- a/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift +++ b/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift @@ -91,7 +91,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga let containerView = transitionContext.containerView() if let snapshot = snapshot { - snapshot.alpha = 0 + snapshot.alpha = 1 let transitionViewCover = UIView(frame: frame) transitionViewCover.backgroundColor = UIColor.whiteColor() @@ -124,8 +124,6 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga thumbnailImageView.frame = frame animatingView.addSubview(thumbnailImageView) - snapshot?.alpha = 1 - let fullDuration = transitionDuration(transitionContext) @@ -134,7 +132,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga UIView.animateKeyframesWithDuration(fullDuration, delay: 0.0, options: .CalculationModeLinear, animations: { () -> Void in - UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.4, animations: { () -> Void in + UIView.addKeyframeWithRelativeStartTime(0.7, relativeDuration: 0.3, animations: { () -> Void in animatingVC.view.backgroundColor = UIColor.blackColor() }) @@ -162,7 +160,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga thumbnailImageView.frame = frame thumbnailImageView.center = animatingView.center - transitionViewSnapshot.alpha = 0 +// transitionViewSnapshot.alpha = 0.5 thumbnailImageView.alpha = 1 }) @@ -206,6 +204,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga containerView.addSubview(toView!) if let snapshot = snapshot { + snapshot.alpha = 1 containerView.addSubview(snapshot) } @@ -240,7 +239,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga animatingVC.mediaView.alpha = 0 }) - UIView.addKeyframeWithRelativeStartTime(0.2, relativeDuration: 0.6, animations: { () -> Void in + UIView.addKeyframeWithRelativeStartTime(0.2, relativeDuration: 0.8, animations: { () -> Void in transitionViewSnapshot.frame = self.frame thumbnailImageView.frame = self.frame From e68c18312593c4a82c8d0a0bf29bc131c4778646 Mon Sep 17 00:00:00 2001 From: nixzhu Date: Wed, 29 Jul 2015 16:34:56 +0800 Subject: [PATCH 3/3] fix video preview --- ...ConversationMessagePreviewNavigationControllerDelegate.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift b/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift index 0f7ba6e8..72d47afb 100644 --- a/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift +++ b/Yep/ViewControllers/Conversation/ConversationMessagePreviewNavigationControllerDelegate.swift @@ -182,6 +182,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga animatingVC.view.backgroundColor = UIColor.blackColor() transitionViewSnapshot.removeFromSuperview() + thumbnailImageView.removeFromSuperview() //self.snapshot?.removeFromSuperview() @@ -253,6 +254,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga self.transitionView?.alpha = 1 transitionViewSnapshot.removeFromSuperview() + thumbnailImageView.removeFromSuperview() self.snapshot?.removeFromSuperview()