diff --git a/SKPhotoBrowser/SKPhotoBrowser.swift b/SKPhotoBrowser/SKPhotoBrowser.swift
index f5165ad..67e0db8 100644
--- a/SKPhotoBrowser/SKPhotoBrowser.swift
+++ b/SKPhotoBrowser/SKPhotoBrowser.swift
@@ -87,9 +87,10 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
}
// device property
- final let screenBound = UIScreen.mainScreen().bounds
- var screenWidth: CGFloat { return screenBound.size.width }
- var screenHeight: CGFloat { return screenBound.size.height }
+ final let screenBounds = UIScreen.mainScreen().bounds
+ var screenWidth: CGFloat { return screenBounds.size.width }
+ var screenHeight: CGFloat { return screenBounds.size.height }
+ var screenRatio: CGFloat { return screenWidth / screenHeight }
// custom abilities
public var displayAction: Bool = true
@@ -115,6 +116,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
// tool for controls
private var applicationWindow: UIWindow!
+ private var backgroundView: UIView!
private var toolBar: UIToolbar!
private var toolCounterLabel: UILabel!
private var toolCounterButton: UIBarButtonItem!
@@ -244,6 +246,12 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
view.backgroundColor = UIColor.blackColor()
view.clipsToBounds = true
+ view.opaque = false
+
+ backgroundView = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight))
+ backgroundView.backgroundColor = .blackColor()
+ backgroundView.alpha = 0.0
+ applicationWindow.addSubview(backgroundView)
// setup paging
let pagingScrollViewFrame = frameForPagingScrollView()
@@ -252,7 +260,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
pagingScrollView.delegate = self
pagingScrollView.showsHorizontalScrollIndicator = true
pagingScrollView.showsVerticalScrollIndicator = true
- pagingScrollView.backgroundColor = UIColor.blackColor()
+ pagingScrollView.backgroundColor = UIColor.clearColor()
pagingScrollView.contentSize = contentSizeForPagingScrollView()
view.addSubview(pagingScrollView)
@@ -694,6 +702,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
// MARK: - panGestureRecognized
public func panGestureRecognized(sender: UIPanGestureRecognizer) {
+ backgroundView.hidden = true
let scrollView = pageDisplayedAtIndex(currentPageIndex)
let viewHeight = scrollView.frame.size.height
@@ -715,12 +724,15 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
translatedPoint = CGPoint(x: firstX, y: firstY + translatedPoint.y)
scrollView.center = translatedPoint
- view.opaque = true
+ let minOffset = viewHalfHeight/4
+ let offset = 1 - (scrollView.center.y > viewHalfHeight ? scrollView.center.y - viewHalfHeight : -(scrollView.center.y - viewHalfHeight)) / viewHalfHeight
+ view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(max(0.7, offset))
// gesture end
if sender.state == .Ended {
- if scrollView.center.y > viewHalfHeight+40 || scrollView.center.y < viewHalfHeight-40 {
+ if scrollView.center.y > viewHalfHeight + minOffset || scrollView.center.y < viewHalfHeight - minOffset {
+ backgroundView.backgroundColor = self.view.backgroundColor
determineAndClose()
return
@@ -739,6 +751,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
UIView.beginAnimations(nil, context: nil)
UIView.setAnimationDuration(animationDuration)
UIView.setAnimationCurve(UIViewAnimationCurve.EaseIn)
+ view.backgroundColor = UIColor.blackColor()
scrollView.center = CGPoint(x: finalX, y: finalY)
UIView.commitAnimations()
}
@@ -750,11 +763,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
view.hidden = true
pagingScrollView.alpha = 0.0
-
- let fadeView = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight))
- fadeView.backgroundColor = .blackColor()
- fadeView.alpha = 0.0
- applicationWindow.addSubview(fadeView)
+ backgroundView.alpha = 0
if let sender = delegate?.viewForPhoto?(self, index: initialPageIndex) ?? senderViewForAnimation {
@@ -762,8 +771,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
sender.hidden = true
let imageFromView = (senderOriginImage ?? getImageFromView(sender)).rotateImageByOrientation()
- let screenScale = applicationWindow.frame.width / applicationWindow.frame.height
- let imageScale = imageFromView.size.width / imageFromView.size.height
+ let imageRatio = imageFromView.size.width / imageFromView.size.height
let finalImageViewFrame:CGRect
resizableImageView = UIImageView(image: imageFromView)
@@ -772,14 +780,14 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
resizableImageView.contentMode = .ScaleAspectFill
applicationWindow.addSubview(resizableImageView)
- if screenScale < imageScale {
+ if screenRatio < imageRatio {
let width = applicationWindow.frame.width
- let height = width / imageScale
+ let height = width / imageRatio
let yOffset = (applicationWindow.frame.height - height) / 2
finalImageViewFrame = CGRect(x: 0, y: yOffset, width: width, height: height)
} else {
let height = applicationWindow.frame.height
- let width = height * imageScale
+ let width = height * imageRatio
let xOffset = (applicationWindow.frame.width - width) / 2
finalImageViewFrame = CGRect(x: xOffset, y: 0, width: width, height: height)
}
@@ -792,7 +800,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
UIView.animateWithDuration(animationDuration, delay:0, usingSpringWithDamping:animationDamping, initialSpringVelocity:0, options:.CurveEaseInOut, animations: { () -> Void in
- fadeView.alpha = 1.0
+ self.backgroundView.alpha = 1.0
self.resizableImageView.frame = finalImageViewFrame
if self.displayCloseButton == true {
@@ -814,15 +822,16 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
},
completion: { (Bool) -> Void in
self.view.hidden = false
+ self.backgroundView.hidden = true
self.pagingScrollView.alpha = 1.0
self.resizableImageView.alpha = 0.0
- fadeView.removeFromSuperview()
})
} else {
UIView.animateWithDuration(animationDuration, delay:0, usingSpringWithDamping:animationDamping, initialSpringVelocity:0, options:.CurveEaseInOut, animations: { () -> Void in
- fadeView.alpha = 1.0
+
+ self.backgroundView.alpha = 1.0
if self.displayCloseButton == true {
self.closeButton.alpha = 1.0
self.closeButton.frame = self.closeButtonShowFrame
@@ -843,7 +852,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
completion: { (Bool) -> Void in
self.view.hidden = false
self.pagingScrollView.alpha = 1.0
- fadeView.removeFromSuperview()
+ self.backgroundView.hidden = true
})
}
}
@@ -851,6 +860,8 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
public func performCloseAnimationWithScrollView(scrollView: SKZoomingScrollView) {
view.hidden = true
+ backgroundView.hidden = false
+ backgroundView.alpha = 1
statusBarStyle = isStatusBarOriginallyHidden ? nil : originalStatusBarStyle
setNeedsStatusBarAppearanceUpdate()
@@ -859,7 +870,6 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
senderViewOriginalFrame = (sender.superview?.convertRect(sender.frame, toView:nil))!
}
- let fadeView = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight))
let contentOffset = scrollView.contentOffset
let scrollFrame = scrollView.photoImageView.frame
let offsetY = scrollView.center.y - (scrollView.bounds.height/2)
@@ -870,11 +880,7 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
width: scrollFrame.width,
height: scrollFrame.height)
- fadeView.backgroundColor = .blackColor()
- fadeView.alpha = 1.0
-
- applicationWindow.addSubview(fadeView)
- resizableImageView.image = scrollView.photo.underlyingImage.rotateImageByOrientation()
+ resizableImageView.image = scrollView.photo?.underlyingImage.rotateImageByOrientation() ?? resizableImageView.image
resizableImageView.frame = frame
resizableImageView.alpha = 1.0
resizableImageView.clipsToBounds = true
@@ -888,12 +894,12 @@ public class SKPhotoBrowser: UIViewController, UIScrollViewDelegate {
}
UIView.animateWithDuration(animationDuration, delay:0, usingSpringWithDamping:animationDamping, initialSpringVelocity:0, options:.CurveEaseInOut, animations: { () -> () in
- fadeView.alpha = 0.0
+ self.backgroundView.alpha = 0.0
self.resizableImageView.layer.frame = self.senderViewOriginalFrame
},
completion: { (Bool) -> () in
self.resizableImageView.removeFromSuperview()
- fadeView.removeFromSuperview()
+ self.backgroundView.removeFromSuperview()
self.dismissPhotoBrowser()
})
}
diff --git a/SKPhotoBrowserExample/SKPhotoBrowserExample/Base.lproj/Main.storyboard b/SKPhotoBrowserExample/SKPhotoBrowserExample/Base.lproj/Main.storyboard
index be758a1..9e76a95 100644
--- a/SKPhotoBrowserExample/SKPhotoBrowserExample/Base.lproj/Main.storyboard
+++ b/SKPhotoBrowserExample/SKPhotoBrowserExample/Base.lproj/Main.storyboard
@@ -119,7 +119,7 @@
-
+
diff --git a/SKPhotoBrowserExample/SKPhotoBrowserExample/CameraRollViewController.swift b/SKPhotoBrowserExample/SKPhotoBrowserExample/CameraRollViewController.swift
index 81808fb..5ffbb0f 100644
--- a/SKPhotoBrowserExample/SKPhotoBrowserExample/CameraRollViewController.swift
+++ b/SKPhotoBrowserExample/SKPhotoBrowserExample/CameraRollViewController.swift
@@ -110,6 +110,7 @@ class CameraRollViewController: UIViewController, SKPhotoBrowserDelegate, UIColl
browser.bounceAnimation = true
browser.displayDeleteButton = true
browser.displayAction = false
+ browser.statusBarStyle = .LightContent
self.presentViewController(browser, animated: true, completion: {})
}
diff --git a/SKPhotoBrowserExample/SKPhotoBrowserExample/ViewController.swift b/SKPhotoBrowserExample/SKPhotoBrowserExample/ViewController.swift
index 40dc8d5..522fd5f 100644
--- a/SKPhotoBrowserExample/SKPhotoBrowserExample/ViewController.swift
+++ b/SKPhotoBrowserExample/SKPhotoBrowserExample/ViewController.swift
@@ -94,7 +94,8 @@ class ViewController: UIViewController, UICollectionViewDataSource, UICollection
// MARK: - SKPhotoBrowserDelegate
func didShowPhotoAtIndex(index: Int) {
- // do some handle if you need
+ collectionView.visibleCells().forEach({$0.hidden = false})
+ collectionView.cellForItemAtIndexPath(NSIndexPath(forItem: index, inSection: 0))?.hidden = true
}
func willDismissAtPageIndex(index: Int) {
@@ -122,6 +123,10 @@ class ViewController: UIViewController, UICollectionViewDataSource, UICollection
return collectionView.cellForItemAtIndexPath(NSIndexPath(forItem: index, inSection: 0))
}
+
+ override func preferredStatusBarStyle() -> UIStatusBarStyle {
+ return .LightContent
+ }
}
diff --git a/Screenshots/example01.gif b/Screenshots/example01.gif
index 165c179..eb0173f 100644
Binary files a/Screenshots/example01.gif and b/Screenshots/example01.gif differ