From 8d2d24ff4ff46500a6127202810fcbdc76464d0a Mon Sep 17 00:00:00 2001 From: suzuki_keishi Date: Tue, 9 Aug 2016 21:39:35 +0900 Subject: [PATCH] [WIP]clean, refactor at animation. --- SKPhotoBrowser/SKAnimator.swift | 69 ++++++++++++++++++++++-- SKPhotoBrowser/SKPhotoBrowser.swift | 4 +- SKPhotoBrowser/SKZoomingScrollView.swift | 11 ++-- 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/SKPhotoBrowser/SKAnimator.swift b/SKPhotoBrowser/SKAnimator.swift index b26805e..0d2c02a 100644 --- a/SKPhotoBrowser/SKAnimator.swift +++ b/SKPhotoBrowser/SKAnimator.swift @@ -35,7 +35,6 @@ class SKAnimator: NSObject, SKPhotoBrowserAnimatorDelegate { guard let window = appWindow else { return } - guard let sender = browser.delegate?.viewForPhoto?(browser, index: browser.initialPageIndex) ?? browser.senderViewForAnimation else { presentAnimation(browser) return @@ -65,6 +64,53 @@ class SKAnimator: NSObject, SKPhotoBrowserAnimatorDelegate { } func willDismiss(browser: SKPhotoBrowser) { + guard let appWindow = UIApplication.sharedApplication().delegate?.window else { + return + } + guard let window = appWindow else { + return + } + + browser.view.hidden = true + browser.backgroundView.hidden = false + browser.backgroundView.alpha = 1 + + browser.statusBarStyle = browser.isStatusBarOriginallyHidden ? nil : browser.originalStatusBarStyle + browser.setNeedsStatusBarAppearanceUpdate() + + if let sender = browser.senderViewForAnimation { + if let senderViewOriginalFrameTemp = sender.superview?.convertRect(sender.frame, toView:nil) { + senderViewOriginalFrame = senderViewOriginalFrameTemp + } else if let senderViewOriginalFrameTemp = sender.layer.superlayer?.convertRect(sender.frame, toLayer: nil) { + senderViewOriginalFrame = senderViewOriginalFrameTemp + } + } + + let scrollView = browser.pageDisplayedAtIndex(browser.currentPageIndex) + let contentOffset = scrollView.contentOffset + let scrollFrame = scrollView.photoImageView.frame + let offsetY = scrollView.center.y - (scrollView.bounds.height/2) + + let frame = CGRect( + x: scrollFrame.origin.x - contentOffset.x, + y: scrollFrame.origin.y + contentOffset.y + offsetY, + width: scrollFrame.width, + height: scrollFrame.height) + + browser.resizableImageView.image = scrollView.photo?.underlyingImage?.rotateImageByOrientation() ?? browser.resizableImageView.image + browser.resizableImageView.frame = frame + browser.resizableImageView.alpha = 1.0 + browser.resizableImageView.clipsToBounds = true + browser.resizableImageView.contentMode = .ScaleAspectFill + window.addSubview(browser.resizableImageView) + + if let view = browser.senderViewForAnimation where view.layer.cornerRadius != 0 { + let duration = (animationDuration * Double(animationDamping)) + browser.resizableImageView.layer.masksToBounds = true + browser.resizableImageView.addCornerRadiusAnimation(0, to: view.layer.cornerRadius, duration: duration) + } + + dismissAnimation(browser) } } @@ -95,8 +141,7 @@ private extension SKAnimator { } private extension SKAnimator { - - func presentAnimation (browser: SKPhotoBrowser, completion: (Void -> Void)? = nil) { + func presentAnimation(browser: SKPhotoBrowser, completion: (Void -> Void)? = nil) { browser.view.hidden = true browser.view.alpha = 0.0 @@ -118,6 +163,24 @@ private extension SKAnimator { browser.resizableImageView.alpha = 0.0 }) } + + func dismissAnimation(browser: SKPhotoBrowser, completion: (Void -> Void)? = nil) { + UIView.animateWithDuration( + animationDuration, + delay:0, + usingSpringWithDamping:animationDamping, + initialSpringVelocity:0, + options:.CurveEaseInOut, + animations: { () -> () in + browser.backgroundView.alpha = 0.0 + browser.resizableImageView.layer.frame = self.senderViewOriginalFrame + }, + completion: { (Bool) -> () in + browser.resizableImageView.removeFromSuperview() + browser.backgroundView.removeFromSuperview() + browser.dismissPhotoBrowser() + }) + } } diff --git a/SKPhotoBrowser/SKPhotoBrowser.swift b/SKPhotoBrowser/SKPhotoBrowser.swift index 3330f8f..1d6584d 100644 --- a/SKPhotoBrowser/SKPhotoBrowser.swift +++ b/SKPhotoBrowser/SKPhotoBrowser.swift @@ -175,8 +175,8 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate { private var isEndAnimationByToolBar: Bool = true private var isViewActive: Bool = false private var isPerformingLayout: Bool = false - private var isStatusBarOriginallyHidden = UIApplication.sharedApplication().statusBarHidden - private var originalStatusBarStyle: UIStatusBarStyle { + var isStatusBarOriginallyHidden = UIApplication.sharedApplication().statusBarHidden + var originalStatusBarStyle: UIStatusBarStyle { return self.presentingViewController?.preferredStatusBarStyle() ?? UIApplication.sharedApplication().statusBarStyle } private var buttonTopOffset: CGFloat { diff --git a/SKPhotoBrowser/SKZoomingScrollView.swift b/SKPhotoBrowser/SKZoomingScrollView.swift index dc314c3..bcc9cef 100644 --- a/SKPhotoBrowser/SKZoomingScrollView.swift +++ b/SKPhotoBrowser/SKZoomingScrollView.swift @@ -271,10 +271,13 @@ public class SKZoomingScrollView: UIScrollView, UIScrollViewDelegate, SKDetectin // MARK: - SKDetectingViewDelegate func handleSingleTap(view: UIView, touch: UITouch) { - if photoBrowser?.enableZoomBlackArea == true { - if photoBrowser?.areControlsHidden() == false && photoBrowser?.enableSingleTapDismiss == true { - photoBrowser?.determineAndClose() - } + guard photoBrowser?.enableZoomBlackArea == true else { + return + } + + if photoBrowser?.areControlsHidden() == false && photoBrowser?.enableSingleTapDismiss == true { + photoBrowser?.determineAndClose() + } else { photoBrowser?.toggleControls() } }