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..72d47afb 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 } @@ -78,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() @@ -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,7 +121,8 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga transitionViewSnapshot.frame = frame animatingView.addSubview(transitionViewSnapshot) - snapshot?.alpha = 1 + thumbnailImageView.frame = frame + animatingView.addSubview(thumbnailImageView) let fullDuration = transitionDuration(transitionContext) @@ -118,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() }) @@ -130,7 +144,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 +156,15 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga transitionViewSnapshot.frame = frame transitionViewSnapshot.center = animatingView.center + + thumbnailImageView.frame = frame + thumbnailImageView.center = animatingView.center + +// transitionViewSnapshot.alpha = 0.5 + 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 @@ -162,6 +182,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga animatingVC.view.backgroundColor = UIColor.blackColor() transitionViewSnapshot.removeFromSuperview() + thumbnailImageView.removeFromSuperview() //self.snapshot?.removeFromSuperview() @@ -184,6 +205,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga containerView.addSubview(toView!) if let snapshot = snapshot { + snapshot.alpha = 1 containerView.addSubview(snapshot) } @@ -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 + UIView.addKeyframeWithRelativeStartTime(0.2, relativeDuration: 0.8, animations: { () -> Void in transitionViewSnapshot.frame = self.frame + thumbnailImageView.frame = self.frame + + transitionViewSnapshot.alpha = 1 + thumbnailImageView.alpha = 0 }) @@ -227,6 +254,7 @@ class ConversationMessagePreviewNavigationControllerDelegate: NSObject, UINaviga self.transitionView?.alpha = 1 transitionViewSnapshot.removeFromSuperview() + thumbnailImageView.removeFromSuperview() self.snapshot?.removeFromSuperview() 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