clean, refactor, update readme.

This commit is contained in:
suzuki_keishi 2016-08-23 14:02:01 +09:00
parent cb53afd3a2
commit 6d6a93a1ae
5 changed files with 96 additions and 128 deletions

View File

@ -7,12 +7,12 @@ SKPhotoBrowser
Simple PhotoBrowser/Viewer inspired by facebook, twitter photo browsers written by swift, based on [IDMPhotoBrowser](https://github.com/ideaismobile/IDMPhotoBrowser), [MWPhotoBrowser](https://github.com/mwaterfall/MWPhotoBrowser).
## features
- Can display one or more images by providing either `UIImage` objects, or string of URL array.
- Display one or more images by providing either `UIImage` objects, or string of URL array.
- Photos can be zoomed and panned, and optional captions can be displayed
- Minimalistic Facebook-like interface, swipe up/down to dismiss
- has simple ability to custom photobrowser. (hide/show statusbar, some toolbar for controls, swipe control)
- Handling and caching photos from web
- Landscape handling.
- Ability to custom control. (hide/ show toolbar for controls, / swipe control)
- Handling and caching photos from web
- Landscape handling
- Delete photo support(by offbye). By set displayDelete=true show a delete icon in statusbar, deleted indexes can be obtain from delegate func didDeleted
![sample](Screenshots/example02.gif)
@ -42,43 +42,45 @@ github "suzuki-0000/SKPhotoBrowser"
Add the code directly into your project.
##Usage
See the code snippet below for an example of how to implement, or example project would be easy to understand.
See the code snippet below for an example of how to implement, or see the example project.
from UIImages:
```swift
// add SKPhoto Array from UIImage
// 1. create SKPhoto Array from UIImage
var images = [SKPhoto]()
let photo = SKPhoto.photoWithImage(UIImage())// add some UIImage
images.append(photo)
// create PhotoBrowser Instance, and present.
// 2. create PhotoBrowser Instance, and present from your viewController.
let browser = SKPhotoBrowser(photos: images)
browser.initializePageIndex(0)
browser.delegate = self
presentViewController(browser, animated: true, completion: {})
```
from web URLs:
from URLs:
```swift
// URL pattern snippet
// 1. create URL Array
var images = [SKPhoto]()
let photo = SKPhoto.photoWithImageURL("https://placehold.jp/150x150.png")
photo.shouldCachePhotoURLImage = false // you can use image cache by true(NSCache)
images.append(photo)
// create PhotoBrowser Instance, and present.
// 2. create PhotoBrowser Instance, and present.
let browser = SKPhotoBrowser(photos: images)
browser.initializePageIndex(0)
presentViewController(browser, animated: true, completion: {})
```
from local files:
```swift
// images from local files
// 1. create images from local files
var images = [SKLocalPhoto]()
let photo = SKLocalPhoto.photoWithImageURL("..some_local_path/150x150.png")
images.append(photo)
// create PhotoBrowser Instance, and present.
// 2. create PhotoBrowser Instance, and present.
let browser = SKPhotoBrowser(photos: images)
browser.initializePageIndex(0)
presentViewController(browser, animated: true, completion: {})
```
@ -88,6 +90,7 @@ If you want to use zooming effect from an existing view, use another initializer
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let cell = collectionView.cellForItemAtIndexPath(indexPath)
let originImage = cell.exampleImageView.image // some image for baseImage
let browser = SKPhotoBrowser(originImage: originImage, photos: images, animatedFromView: cell)
browser.initializePageIndex(indexPath.row)
presentViewController(browser, animated: true, completion: {})
@ -97,20 +100,19 @@ func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath i
### Custom
#### Toolbar
You can customize the toolbar(back/forward, counter, some action) button.
You can customize Toolbar via SKPhotoBrowserOptions.
- displayCounterLabel (default is true)
- displayBackAndForwardButton (default is true)
- displayAction (default is true)
If you dont want the toolbar at all, you can set displayToolbar = false (default is true)
```swift
SKPhotoBrowserOptions.displayToolbar = false // all tool bar will be hidden
SKPhotoBrowserOptions.displayCounterLabel = false // counter label will be hidden
SKPhotoBrowserOptions.displayBackAndForwardButton = false // back / forward button will be hidden
SKPhotoBrowserOptions.displayAction = false // action button will be hidden
SKPhotoBrowserOptions.displayDeleteButton = true // delete button will be shown
let browser = SKPhotoBrowser(originImage: originImage, photos: images, animatedFromView: cell)
browser.displayToolbar = false // all tool bar will be hidden
browser.displayCounterLabel = false // counter label will be hidden
browser.displayBackAndForwardButton = false // back / forward button will be hidden
browser.displayAction = false // action button will be hidden
browser.displayDeleteButton = true // delete button will be shown
```
#### CustomButton Image

View File

@ -11,62 +11,6 @@ import Foundation
// helpers which often used
private let bundle = NSBundle(forClass: SKPhotoBrowser.self)
class SKButtons {
var customCloseButtonImage: UIImage!
var customCloseButtonEdgeInsets: UIEdgeInsets!
var customDeleteButtonImage: UIImage!
var customDeleteButtonEdgeInsets: UIEdgeInsets!
var closeButton: SKCloseButton!
var deleteButton: SKDeleteButton!
private weak var browser: SKPhotoBrowser?
init(browser: SKPhotoBrowser) {
self.browser = browser
setSettingCloseButton()
setSettingDeleteButton()
}
func setup() {}
private func setSettingCloseButton() {
guard let browser = browser else { return }
closeButton = SKCloseButton(frame: browser.view.frame)
closeButton.addTarget(browser, action: #selector(browser.closeButtonPressed(_:)), forControlEvents: .TouchUpInside)
closeButton.hidden = !SKPhotoBrowserOptions.displayCloseButton
browser.view.addSubview(closeButton)
// If another developer has not set their values
if customCloseButtonImage != nil {
closeButton.setImage(customCloseButtonImage, forState: .Normal)
}
if customCloseButtonEdgeInsets != nil {
closeButton.imageEdgeInsets = customCloseButtonEdgeInsets
}
}
private func setSettingDeleteButton() {
guard let browser = browser else { return }
deleteButton = SKDeleteButton(frame: browser.view.frame)
deleteButton.addTarget(browser, action: #selector(browser.deleteButtonPressed(_:)), forControlEvents: .TouchUpInside)
deleteButton.hidden = !SKPhotoBrowserOptions.displayDeleteButton
browser.view.addSubview(deleteButton)
// If another developer has not set their values
if customDeleteButtonImage != nil {
deleteButton.setImage(customCloseButtonImage, forState: .Normal)
}
if customDeleteButtonEdgeInsets != nil {
deleteButton.imageEdgeInsets = customCloseButtonEdgeInsets
}
}
}
class SKButton: UIButton {
var showFrame: CGRect!
var hideFrame: CGRect!
@ -82,6 +26,7 @@ class SKButton: UIButton {
func setup(imageName: String) {
backgroundColor = .clearColor()
imageEdgeInsets = insets
// clipsToBounds = true
translatesAutoresizingMaskIntoConstraints = true
autoresizingMask = [.FlexibleBottomMargin, .FlexibleLeftMargin, .FlexibleRightMargin, .FlexibleTopMargin]
@ -126,9 +71,5 @@ class SKDeleteButton: SKButton {
}
override func updateFrame() {
showFrame = CGRect(x: SKMesurement.screenWidth - size.width, y: buttonTopOffset,
width: size.width, height: size.height)
hideFrame = CGRect(x: SKMesurement.screenWidth - size.width, y: -20,
width: size.width, height: size.height)
}
}

View File

@ -15,8 +15,9 @@ public class SKPhotoBrowser: UIViewController {
let pageIndexTagOffset: Int = 1000
lazy var buttons: SKButtons = SKButtons(browser: self)
lazy var toolbar: SKToolbar = SKToolbar(frame: self.frameForToolbarAtOrientation(), browser: self)
private var closeButton: SKCloseButton!
private var deleteButton: SKDeleteButton!
private var toolbar: SKToolbar!
// actions
private var activityViewController: UIActivityViewController!
@ -27,13 +28,6 @@ public class SKPhotoBrowser: UIViewController {
private var pagingScrollView: SKPagingScrollView!
var backgroundView: UIView!
private var closeButton: SKCloseButton {
return buttons.closeButton
}
private var deleteButton: SKDeleteButton {
return buttons.deleteButton
}
var initialPageIndex: Int = 0
var currentPageIndex: Int = 0
@ -117,13 +111,13 @@ public class SKPhotoBrowser: UIViewController {
override public func viewDidLoad() {
super.viewDidLoad()
setupAppearance()
toolbar.setup()
buttons.setup()
configureAppearance()
configureButtons()
configureToolbar()
animator.willPresent(self)
}
override public func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
@ -256,7 +250,7 @@ public class SKPhotoBrowser: UIViewController {
return CGPoint(x: newOffset, y: 0)
}
private func setupAppearance() {
private func configureAppearance() {
view.backgroundColor = .blackColor()
view.clipsToBounds = true
view.opaque = false
@ -278,6 +272,24 @@ public class SKPhotoBrowser: UIViewController {
}
}
private func configureButtons() {
closeButton = SKCloseButton(frame: .zero)
closeButton.addTarget(self, action: #selector(closeButtonPressed(_:)), forControlEvents: .TouchUpInside)
closeButton.hidden = !SKPhotoBrowserOptions.displayCloseButton
view.addSubview(closeButton)
deleteButton = SKDeleteButton(frame: .zero)
deleteButton.addTarget(self, action: #selector(deleteButtonPressed(_:)), forControlEvents: .TouchUpInside)
deleteButton.hidden = !SKPhotoBrowserOptions.displayDeleteButton
view.addSubview(deleteButton)
}
private func configureToolbar() {
toolbar = SKToolbar(frame: frameForToolbarAtOrientation(), browser: self)
view.addSubview(toolbar)
}
private func deleteImage() {
defer {
reloadData()
@ -502,7 +514,20 @@ public class SKPhotoBrowser: UIViewController {
}
}
// MARK: - Public Function For Customizing Buttons
public extension SKPhotoBrowser {
func updateCloseButton(image: UIImage, showFrame: CGRect, hideFrame: CGRect) {
// closeButton.setImage(image, forState: .Normal)
// buttons.closeButton.frame = showFrame
// buttons.closeButton.showFrame = showFrame
// buttons.closeButton.hideFrame = hideFrame
// buttons.closeButton.layoutIfNeeded()
}
}
// MARK: - Public Function For Toolbar Control
public extension SKPhotoBrowser {
func cancelControlHiding() {
if controlVisibilityTimer != nil {

View File

@ -32,14 +32,42 @@ class SKToolbar: UIToolbar {
self.init(frame: frame)
self.browser = browser
setupToolbar()
setupApperance()
setupPreviousButton()
setupNextButton()
setupCounterLabel()
setupActionButton()
setupToolbar()
}
func setup() {
func updateToolbar(currentPageIndex: Int) {
guard let browser = browser else { return }
if browser.numberOfPhotos > 1 {
toolCounterLabel.text = "\(currentPageIndex + 1) / \(browser.numberOfPhotos)"
} else {
toolCounterLabel.text = nil
}
toolPreviousButton.enabled = (currentPageIndex > 0)
toolNextButton.enabled = (currentPageIndex < browser.numberOfPhotos - 1)
}
}
private extension SKToolbar {
func setupApperance() {
backgroundColor = .clearColor()
clipsToBounds = true
translucent = true
setBackgroundImage(UIImage(), forToolbarPosition: .Any, barMetrics: .Default)
// toolbar
if !SKPhotoBrowserOptions.displayToolbar {
hidden = true
}
}
func setupToolbar() {
guard let browser = browser else { return }
let flexSpace = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: self, action: nil)
@ -65,36 +93,6 @@ class SKToolbar: UIToolbar {
setItems(items, animated: false)
}
func updateToolbar(currentPageIndex: Int) {
guard let browser = browser else { return }
if browser.numberOfPhotos > 1 {
toolCounterLabel.text = "\(currentPageIndex + 1) / \(browser.numberOfPhotos)"
} else {
toolCounterLabel.text = nil
}
toolPreviousButton.enabled = (currentPageIndex > 0)
toolNextButton.enabled = (currentPageIndex < browser.numberOfPhotos - 1)
}
}
private extension SKToolbar {
func setupToolbar() {
guard let browser = browser else { return }
backgroundColor = .clearColor()
clipsToBounds = true
translucent = true
setBackgroundImage(UIImage(), forToolbarPosition: .Any, barMetrics: .Default)
browser.view.addSubview(self)
// toolbar
if !SKPhotoBrowserOptions.displayToolbar {
hidden = true
}
}
func setupPreviousButton() {
let previousBtn = SKPreviousButton(frame: frame)
previousBtn.addTarget(browser, action: #selector(SKPhotoBrowser.gotoPreviousPage), forControlEvents: .TouchUpInside)

View File

@ -63,12 +63,14 @@ extension FromLocalViewController {
return
}
SKPhotoBrowserOptions.displayDeleteButton = true
// SKPhotoBrowserOptions.displayToolbar = false
let browser = SKPhotoBrowser(originImage: originImage, photos: images, animatedFromView: cell)
// let browser = SKPhotoBrowser(photos: images)
browser.initializePageIndex(indexPath.row)
browser.delegate = self
browser.updateCloseButton(UIImage(named: "image1.jpg")!,
showFrame: CGRect(x: 10, y: 10, width: 30, height: 30),
hideFrame: CGRect(x: 10, y: -10, width: 30, height: 30))
presentViewController(browser, animated: true, completion: {})
}