Simple PhotoBrowser/Viewer inspired by facebook, twitter photo browsers written by swift

Overview

SKPhotoBrowser

[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)

Simple PhotoBrowser/Viewer inspired by facebook, twitter photo browsers written by swift

Swift5 Build Status Platform Contributors

features

  • 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
  • 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
Table/CollectionView sample Button tap sample gif sample
sample sample sample

Requirements

    - iOS 9.0+
    - Swift 2.0+
    - ARC

Version vs Swift version.

    Below is a table that shows which version of SKPhotoBrowser you should use for your Swift version.
Swift version SKPhotoBrowser version
5.0 >= 6.1.0
4.2 >= 6.0.0
4.1 >= 5.0.0
3.2 >= 4.0.0
2.3 2.0.4 - 3.1.4
2.2 <= 2.0.3

Installation

CocoaPods

available on CocoaPods. Just add the following to your project Podfile:

pod 'SKPhotoBrowser'
use_frameworks!

Carthage

To integrate into your Xcode project using Carthage, specify it in your Cartfile:

github "suzuki-0000/SKPhotoBrowser"

Info.plist

If you want to use share image feature, it includes save image into galery, so you should specify a permission into your Info.plist (if you haven't done it yet).

<key>NSPhotoLibraryAddUsageDescription</key>
<string>Used to save images into your galery</string>

Swift Package Manager

Available in Swift Package Manager. Use the repository URL in Xcode

Usage

See the code snippet below for an example of how to implement, or see the example project.

from UIImages:

// 1. create SKPhoto Array from UIImage
var images = [SKPhoto]()
let photo = SKPhoto.photoWithImage(UIImage())// add some UIImage
images.append(photo)

// 2. create PhotoBrowser Instance, and present from your viewController.
let browser = SKPhotoBrowser(photos: images)
browser.initializePageIndex(0)
present(browser, animated: true, completion: {})

from URLs:

// 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)

// 2. create PhotoBrowser Instance, and present.
let browser = SKPhotoBrowser(photos: images)
browser.initializePageIndex(0)
present(browser, animated: true, completion: {})

from local files:

// 1. create images from local files
var images = [SKLocalPhoto]()
let photo = SKLocalPhoto.photoWithImageURL("..some_local_path/150x150.png")
images.append(photo)

// 2. create PhotoBrowser Instance, and present.
let browser = SKPhotoBrowser(photos: images)
browser.initializePageIndex(0)
present(browser, animated: true, completion: {})

If you want to use zooming effect from an existing view, use another initializer:

// e.g.: some tableView or collectionView.
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 ?? UIImage(), photos: images, animatedFromView: cell)
   browser.initializePageIndex(indexPath.row)
   present(browser, animated: true, completion: {})
}

Custom

Toolbar

You can customize Toolbar via SKPhotoBrowserOptions.

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.displayHorizontalScrollIndicator = false            // horizontal scroll bar will be hidden
SKPhotoBrowserOptions.displayVerticalScrollIndicator = false              // vertical scroll bar will be hidden
let browser = SKPhotoBrowser(originImage: originImage, photos: images, animatedFromView: cell)

Colors

You can customize text, icon and background colors via SKPhotoBrowserOptions or SKToolbarOptions

SKPhotoBrowserOptions.backgroundColor = UIColor.whiteColor()               // browser view will be white
SKPhotoBrowserOptions.textAndIconColor = UIColor.blackColor()              // text and icons will be black
SKToolbarOptions.textShadowColor = UIColor.clearColor()                    // shadow of toolbar text will be removed
SKToolbarOptions.font = UIFont(name: "Futura", size: 16.0)                 // font of toolbar will be 'Futura'

Images

You can customize the padding of displayed images via SKPhotoBrowserOptions

SKPhotoBrowserOptions.imagePaddingX = 50                                   // image padding left and right will be 25
SKPhotoBrowserOptions.imagePaddingY = 50                                   // image padding top and bottom will be 25

Statusbar

You can customize the visibility of the Statusbar in browser view via SKPhotoBrowserOptions

SKPhotoBrowserOptions.displayStatusbar = false                             // status bar will be hidden

Close And Delete Buttons

That how you can customize close and delete buttons

SKPhotoBrowserOptions.displayDeleteButton = true                           // delete button will be shown
SKPhotoBrowserOptions.swapCloseAndDeleteButtons = true                     // now close button located on right side of screen and delete button is on left side
SKPhotoBrowserOptions.closeAndDeleteButtonPadding = 20                     // set offset from top and from nearest screen edge of close button and delete button

Custom Cache From Web URL

You can use SKCacheable protocol if others are adaptable. (SKImageCacheable or SKRequestResponseCacheable)

e.g. SDWebImage

// 1. create custom cache, implement in accordance with the protocol
class CustomImageCache: SKImageCacheable { var cache: SDImageCache }

// 2. replace SKCache instance with custom cache
SKCache.sharedCache.imageCache = CustomImageCache()

CustomButton Image

Close, Delete buttons are able to change image and frame.

browser.updateCloseButton(UIImage())
browser.updateUpdateButton(UIImage())

Delete Photo

You can delete your photo for your own handling. detect button tap from removePhoto delegate function.

Photo Captions

Photo captions can be displayed simply bottom of PhotoBrowser. by setting the caption property on specific photos:

let photo = SKPhoto.photoWithImage(UIImage())
photo.caption = "Lorem Ipsum is simply dummy text of the printing and typesetting industry."

SwipeGesture

vertical swipe can enable/disable:

SKPhotoBrowserOptions.disableVerticalSwipe = true

Delegate

There's some trigger point you can handle using delegate. those are optional. See SKPhotoBrowserDelegate for more details.

  • didShowPhotoAtIndex(_ index:Int)
  • willDismissAtPageIndex(_ index:Int)
  • willShowActionSheet(_ photoIndex: Int)
  • didDismissAtPageIndex(_ index:Int)
  • didDismissActionSheetWithButtonIndex(_ buttonIndex: Int, photoIndex: Int)
  • didScrollToIndex(_ index: Int)
  • removePhoto(_ browser: SKPhotoBrowser, index: Int, reload: (() -> Void))
  • viewForPhoto(_ browser: SKPhotoBrowser, index: Int) -> UIView?
  • controlsVisibilityToggled(_ browser: SKPhotoBrowser, hidden: Bool)
let browser = SKPhotoBrowser(originImage: originImage, photos: images, animatedFromView: cell)
browser.delegate = self

// MARK: - SKPhotoBrowserDelegate
func didShowPhotoAtIndex(_ index: Int) {
// when photo will be shown
}

func willDismissAtPageIndex(_ index: Int) {
// when PhotoBrowser will be dismissed
}

func didDismissAtPageIndex(_ index: Int) {
// when PhotoBrowser did dismissed
}

Options

You can access via SKPhotoBrowserOptions, which can use for browser control. See SKPhotoBrowserOptions for more details.

  • single tap handling, dismiss/noaction
  • blackArea handling which is appearing outside of photo
  • bounce animation when appearing/dismissing
  • text color, font, or more
SKPhotoBrowserOptions.enableZoomBlackArea    = true  // default true
SKPhotoBrowserOptions.enableSingleTapDismiss = true  // default false

Photos from

License

available under the MIT license. See the LICENSE file for more info.

Contributors

Thanks goes to these wonderful people (emoji key):


Oreo Chen

💻

Alexander Khitev

💻

K Rummler

💻

Mads Bjerre

💻

Meng Ye

💻

_ant_one

💻

Tim Roesner

💻

胥冥

💻

Kevin Wolkober

💻

PJ Gray

💻

ghysrc

💻

Josef Doležal

💻

Mark Goody

💻

Philippe Riegert

💻

Bryan Irace

💻

dirtmelon

💻

Heberti Almeida

💻

Felix Weiss

💻

.Some

💻

Onur Var

💻

Andrew Barba

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • Bug when zooming small image

    Bug when zooming small image

    Hi! First of all thanks for such control!

    There is a bug when trying to zoom a small image with double tap If you try to zoom such image with gesture everything is fine (it just not scale)

    Here is an example simulator screen shot 30 2016 16 37 07 simulator screen shot 30 2016 16 37 12

    opened by Sol88 11
  • Fatal Error: Array cannot be bridged from Objective-C

    Fatal Error: Array cannot be bridged from Objective-C

    I used 1.8.6 , it works fine. But since I updated to the new version (1.8.8), an error occurred var skPhotos = [SKPhoto]() let photoDatas = self.item.photos do{ for photoData in photoDatas{ let data = try photoData.getData() skPhotos.append(SKPhoto.photoWithImage(UIImage(data: data)!)) } }catch{ } let skPhotoBrowser = SKPhotoBrowser(photos: skPhotos)//Throw that error! Fatal Error: Array cannot be bridged from Objective-C

    opened by hjaurum 8
  • Several tweaks and impovements

    Several tweaks and impovements

    I had some issues regarding the transitions while opening and closing. I also updated the demo app to reflect the changes.

    • Changed content mode to .aspectFill so images don't become squished
    • Add support for cornerRadius transition when opening/closing
    • Option to bounce transition when opening/closing
    • Offset/size fixed when closing from zoomed/panned state
    opened by krummler 8
  • Device rotation doesn't refresh visible imageview frames

    Device rotation doesn't refresh visible imageview frames

    After device rotation if you change between images all are good but current image frame for initial state (after first rotation) is not good, have to be refreshed

    opened by turushan 8
  • SKPhotoBrowserOptions bug

    SKPhotoBrowserOptions bug

    SKPhotoBrowserOptions.displayCounterLabel = true SKPhotoBrowserOptions.displayBackAndForwardButton = true

    Some options don't work in release 4.1.1 I think you have introduced a bug cause I reverted back to 4.1.0 and they worked fine.

    I am not sure why, please give some feedback

    bug 
    opened by BrettWPather 7
  • Issue with multiple actionButtonTitles

    Issue with multiple actionButtonTitles

    Hi, When using multiple actions the default share action is not accessible (the action button is not public so you cannot use it as an anchor for a popup -for presenting a UIDocumentInteractionController) I solved the problem by not using the UIDocumentInteractionController and and changing this function

    func actionButtonPressed(ignoreAndShare ignoreAndShare: Bool) {
            delegate?.willShowActionSheet?(currentPageIndex)
    
            guard numberOfPhotos > 0 else {
                return
            }
    //CHANGES STARTS HERE
            if ignoreAndShare {
                let photo = photos[currentPageIndex]
                guard let underlyingImage = photo.underlyingImage else {
                    return
                }
    
                var activityItems: [AnyObject] = [underlyingImage]
                if photo.caption != nil {
                    if let shareExtraCaption = SKPhotoBrowserOptions.shareExtraCaption {
                        activityItems.append(photo.caption + shareExtraCaption)
                    } else {
                        activityItems.append(photo.caption)
                    }
                }
                activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
                activityViewController.completionWithItemsHandler = {
                    (activity, success, items, error) in
                    self.hideControlsAfterDelay()
                    self.activityViewController = nil
                }
                if UI_USER_INTERFACE_IDIOM() == .Phone {
                    presentViewController(activityViewController, animated: true, completion: nil)
                } else {
                    activityViewController.modalPresentationStyle = .Popover
                    let popover: UIPopoverPresentationController! = activityViewController.popoverPresentationController
                    popover.barButtonItem = toolbar.toolActionButton
                    presentViewController(activityViewController, animated: true, completion: nil)
                }
                return
            }
            //CHANGES ENDs HERE
            if let titles = SKPhotoBrowserOptions.actionButtonTitles {
    

    I call it in

       func didDismissActionSheetWithButtonIndex(buttonIndex: Int, photoIndex: Int) {
          if buttonIndex == indexOfButtonUsedToShare {
                browser.actionButtonPressed(ignoreAndShare: true)}
          }else{
                //action for ther button
          }
    }
    

    Do you think this is the right way or it would be better to make the action button visible? (I don't know how to do it with the latest version of the browser)

    opened by rogomantik 7
  • Memory is not released

    Memory is not released

    I start it from a collectionView with 100+ images, someone bigger than 5MB SKPhotoBrowser(originImage: images[indexPath.row].underlyingImage, photos: images, animatedFromView: cell) when select a cellview the browsers shows but when I scroll the images the memory occupation continues to increase until the app crashes for excessive memory usage (500+MB) the memory of the not visible images don't seem to be released and neither the browser itself when closed

    using ios 10.3.2

    opened by rogomantik 6
  • Delete photo (image)

    Delete photo (image)

    I saw the delete function. But I want to offer a different resolution. If another developer need a function delete images, it is best to make subclass () and there to override this feature. Since we can not guess where to store the image. I show you my solution

    This is in SKPhotoBrowser

    public func deleteButtonPressed(sender: UIButton) {
    
        }
    
        public func deleteImage() {
            if photos.count > 1 {
                photos.removeAtIndex(currentPageIndex)
                gotoPreviousPage()
                updateToolbar()
            } else if photos.count == 1 {
                dismissPhotoBrowser()
            }
            reloadData()
        }
    

    This is a SKPhotoBrowser subclass

    class ImageBrowser: SKPhotoBrowser {
    
        override func deleteButtonPressed(sender: UIButton) {
            print("ImageBrowser")
            let userDefault = NSUserDefaults.standardUserDefaults()
            let documents = "documents"
            let deleteController = UIAlertController(title: nil, message: "Вы действительно хотите удалить документ?", preferredStyle: .Alert)
            deleteController.addAction(UIAlertAction(title: "Нет", style: .Cancel, handler: nil))
            deleteController.addAction(UIAlertAction(title: "Да", style: .Destructive, handler: { (action) -> Void in
                var allDocuments = [DocumentEntity]()
                if let data = userDefault.objectForKey(documents) as? NSData {
                    allDocuments = (NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [DocumentEntity])!
                }
                allDocuments.removeAtIndex(self.currentPageIndex)
                let newData = NSKeyedArchiver.archivedDataWithRootObject(allDocuments)
                userDefault.setObject(newData, forKey: documents)
                userDefault.synchronize()
                self.deleteImage()
            }))
            presentViewController(deleteController, animated: true, completion: nil)
        }
    }
    
    

    And we can to use this subclass like

     let imageBrowser = ImageBrowser(photos: imageArray)
            imageBrowser.delegate = self
            imageBrowser.isForceStatusBarHidden = true
            imageBrowser.displayDeleteButton = true
            imageBrowser.initializePageIndex(indexPath.row)
            presentViewController(imageBrowser, animated: true) { () -> Void in
            }
    

    I checked it and it fine works. What do you think about it?

    opened by alexanderkhitev 6
  • Dismiss Animation to Origin

    Dismiss Animation to Origin

    Is there a way to dismiss the shown image back to the originImage/animatedFromView?

    Using the latest swift 3 version I get a nice animation from the animatedFromView to the SKPhotoBrowser but when dismissing the image is just faded out.

    Anything I'm missing?

    opened by winkelsdorf 5
  • fatal error: unexpectedly found nil while unwrapping an Optional value

    fatal error: unexpectedly found nil while unwrapping an Optional value

    Hello. With the newest version of SKPhotoBrowser ( 3.0.0 ) i am getting this fatal error when the browser loads and displays one of the pictures. It is marking this line from the code guard let page = self.pagingScrollView.pageDisplayingAtPhoto(photo), let photo = page.photo else { and using the debugger to get some information it shows that (lldb) p pagingScrollView (SKPhotoBrowser.SKPagingScrollView!) $R1 = nil and (lldb) po pagingScrollView fatal error: unexpectedly found nil while unwrapping an Optional value expression produced error: /var/folders/gv/hmkzdb493jbcg1drw2m_6h_80000gn/T/lldb/410/expr127.swift:1:95: error: 'SKPagingScrollView' is not a member type of '$__lldb_context' (aka 'SKPhotoBrowser') $__lldb__DumpForDebugger(Swift.UnsafePointer<Swift.ImplicitlyUnwrappedOptional<SKPhotoBrowser.SKPagingScrollView>>(bitPattern: 0x11f483eb0).memory) ~~~~~~~~~~~~~~ ^ /var/folders/gv/hmkzdb493jbcg1drw2m_6h_80000gn/T/lldb/410/expr127.swift:1:45: note: while parsing this '<' as a type parameter bracket $__lldb__DumpForDebugger(Swift.UnsafePointer<Swift.ImplicitlyUnwrappedOptional<SKPhotoBrowser.SKPagingScrollView>>(bitPattern: 0x11f483eb0).memory) And now im using version 2.0.3 since i don't have that problem there.

    opened by ibeleliev 5
  • Custom Cache and ImageDownloader + Floating View

    Custom Cache and ImageDownloader + Floating View

    How can I use a custom cache and downloader? I use Kingfisher as my MainImageManager, so when loading a new image from url, both SKPhotoBrowser and Kingfisher downloading the photo.

    P.S: I had one other problem: I have a floating view (like FAB button), when dismissing a photo by swipe, it's animation covers the floating view till it's fit in the source rect. How can I manage this? (I've tried to send the animating view to back of the floating view, but in another view I have two floating buttons that this workaround won't work.)

    Also when a photo is dismissed by swipe where source rect is not in view, the animation is weird (flickering till disappears), I've managed it by manipulating the SKPhotoBrowser class, but I just wanted to know do you have any straight solution for that?

    Thanks! 😊

    opened by iAlirezaKML 5
  • archive ipa error

    archive ipa error

    Undefined symbols for architecture arm64: "_swift_stdlib_isStackAllocationSafe", referenced from: _$ss10_NativeSetV11subtractingyAByxGqd__7ElementQyd__RszSTRd__lF14SKPhotoBrowser19SKZoomingScrollViewC_SayAIGTg5Tf4ng_n in libSKPhotoBrowser.a(SKPagingScrollView.o) ld: symbol(s) not found for architecture arm64

    opened by zhangcheng1989 0
  • Video support added.

    Video support added.

    SKPhotoBrowser is a beautiful tool which save million of lives, only thing which I was missing is the video support, I tried my level best to write code following the same footprint, I hope my pull request will be accepted and I will become part of the community

    opened by engasix 0
  • Fix the problem that the Arabic share button cannot be clicked.

    Fix the problem that the Arabic share button cannot be clicked.

    If the Arabic share button is on the left, it will cause the button to be unclickable. I hope to release a version as soon as possible, and now I will overwrite the modified code every time I execute pod install.

    opened by iLiuChang 0
  • Add specifiable cache key for SKPhoto and some tests about SKPhoto.

    Add specifiable cache key for SKPhoto and some tests about SKPhoto.

    1. It will fix #425.
    2. Added some tests for SKPhoto to guarantee SKPhoto instances are functional.
    3. I'm willing to adjust the code if you had a better approach.
    opened by fattiger00 0
  • Fixed `SKZoomingScrollView` Initialization

    Fixed `SKZoomingScrollView` Initialization

    • When SKZoomingScrollView is initialized, the setup() method is called twice: once in init(frame:) and then once more in init(frame:browser:)
    • Double call of setup() results in UI elements (such as SKDetectingImageView) created twice
    • Even though SKZoomingScrollView’s properties (e.g. imageView) are reassigned on the second call of setup(), the UI elements remain in the view hierarchy and device’s memory
    • To fix this, init(frame:browser:) has been to changed to be a designated initializer, and init(frame:) has been removed
    opened by yakovmanshin 0
Releases(7.0.0)
  • 7.0.0(Jul 20, 2021)

  • 6.1.0(Apr 3, 2019)

    Big Changed

    • #330 Changes for swift 5.0, Xcode 10.2,

    Updated

    • #339 fix #316 and #323 bug by xiaoweiFive
    • #342 update readme.md by SherlockQi
    • #344 fixed broken page recycling (regression from c6df44f9)
    • #348 keep thumbnail display until image download finished by seanxux
    • #353 loop call SKPhotoBrowserDelegate.controlsVisibilityToggled function by cp110
    • #361 Support for iPhoneXS, XSMax and XR by jdanthinne
    • #361 Xcode 10.2 optimization by TParizek
    Source code(tar.gz)
    Source code(zip)
  • 6.0.0(Sep 14, 2018)

    Big Changed

    • #330 Changes for swift 4.2, Xcode 10, and iOS 12 by jlcanale

    Updated

    • #314 Add possibility to provide custom request parameters by Fiser33
    • #315 Fix: Unable to set delete and close button images without setting size. by kiztonwose
    • #318 fix unreleased views in uiwindow for non-dismiss animation case by fans3210
    • #321 Set the backround view's background color from settings by pantelisss
    • #331 Add ability to lower caption and give caption a background gradient by corban123
    • #334 Prevent app crashed on zooming when xScale or yScale is NaN, Inf by GE-N
    • #335 use the size of the window instead of UIScreen to support SplitScreen by PatrickDotStar
    Source code(tar.gz)
    Source code(zip)
  • 5.1.0(May 7, 2018)

  • 5.0.9(Apr 23, 2018)

    5.0.9

    Updated

    • #304 CaptionViewForPhotoAtIndex is not work
    • #305 Padding properties for close and delete button.
    • Bug At iphoneX, close / delete / pagination can be tapped correctly.
    Source code(tar.gz)
    Source code(zip)
  • 5.0.8(Apr 12, 2018)

    5.0.8

    Updated

    • #224 override popupShare not working
    • #248 always ignore image cache, asked by FicowShen
    • #304 CaptionViewForPhotoAtIndex is not work
    • #301 SKPhotoBrowserOptions.displayDeleteButton not working
    • #302 Add method to remove all images for SKCache by filograno
    Source code(tar.gz)
    Source code(zip)
  • 5.0.7(Mar 29, 2018)

    Updated

    • #301 SKPhotoBrowserOptions.displayCounterLabel is not working
    • #297 I want to hide SKPagingScrollView's horizontal indicator by mothule
    Source code(tar.gz)
    Source code(zip)
  • 5.0.6(Mar 9, 2018)

  • 5.0.5(Feb 13, 2018)

    5.0.5

    • #271 SmartInvert now works properly
    • #288 Add the long photo width match screen option.
    • #289 Add SWIFT_VERSION to xcconfig
    • #273 Fixed crash on resizableImageView force unwrapping.
    Source code(tar.gz)
    Source code(zip)
  • 5.0.3(Dec 14, 2017)

  • 5.0.2(Dec 14, 2017)

    5.0.2

    Updated

    • Refactoring part1
    • #255 Fixed the crash where the PhotoBrowser could crash.
    • #262 Fix calling willDismissAtPageIndex delegate method
    • #263 Remove unused options
    • #263 Use iOS 11 Safe Area Insets to layout toolbar
    • #270 Added functionality to add new photos at the end or at the start of c…
    Source code(tar.gz)
    Source code(zip)
  • 5.0.0(Oct 5, 2017)

  • 4.1.1(Sep 19, 2017)

    Updated

    • #208 improve: change deleteButtonPressed(), currentPageIndex access level
    • #210 Fix Shorthand Operator Violation of Swiftlint
    • #215 swiftLint
    • #216 update code to Swift 3.1
    • #223 Removed deprecated constants
    • #225 Custom Cancel button title
    • #227 Attach toolbar and delete button to single browser instance
    • #236 improve SKPhotoBrowserDelegate
    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Aug 30, 2017)

    Updated

    • #173 Move the willDismiss delegate call closer to the dismissal
    • #196 Improved SKCaptionView
    • #197 fix: deleteButton frame does not update if screen has rotated
    • #199 Add SKPhotoBrowserOptions to customize indicator color & style
    • #200 Swap and custom padding for delete and close buttons
    • #205 Replaced deprecated Pi constants
    • #207 Update code style: to Swift3.1
    • #231 Update SKZoomingScrollView.swift
    Source code(tar.gz)
    Source code(zip)
  • 4.0.1(Jan 18, 2017)

    Fixed

    • Update README.md
    • #158 Button Position wrong with changed StatusBar handling
    • #162 Fix SKPhotoBrowserOptions background color
    • #181 Unclear how placeholder image is supposed to work
    Source code(tar.gz)
    Source code(zip)
  • 4.0.0(Jan 5, 2017)

    4.0.0

    Released on 5-1-2017

    Breaking Change

    • go to swift3

    Fixed

    • #171 Add @escaping to delegate method's reload closure parameter.
    • #172 Fix caption font bug
    • #177 Fix a fatal error when app's window is customized.
    • #178 SKPagingScrollView fixes / swift3 branch
    • #179 SKPagingScrollView fixes
    • #182 Always load from the URL even if a placeholder image exists
    • #186 fix setStatusBarHidden is deprecated in iOS 9.0 and demo cannot run
    • #188 Added options for custom photo's caption.
    • #180 SKPhotoBrowserOptions not working Swift 3
    Source code(tar.gz)
    Source code(zip)
  • 4.0.0-beta.1(Nov 14, 2016)

Owner
keishi suzuki
keishi suzuki
Photo Browser / Viewer inspired by Facebook's and Tweetbot's with ARC support, swipe-to-dismiss, image progress and more

IDMPhotoBrowser IDMPhotoBrowser is a new implementation based on MWPhotoBrowser. We've added both user experience and technical features inspired by F

Thiago Peres 2.7k Dec 21, 2022
A photo gallery for iOS with a modern feature set. Similar features as the Facebook photo browser.

EBPhotoPages ”A photo gallery can become a pretty complex component of an app very quickly. The EBPhotoPages project demonstrates how a developer coul

Eddy Borja 1.7k Dec 8, 2022
Jogendra 113 Nov 28, 2022
FacebookImagePicker is Facebook album photo picker written in Swift.

Features • Installation • Usage • Translation • License GBHFacebookImagePicker is Facebook's album photo picker written in Swift, built to provide a s

Florian Gabach 231 Dec 17, 2022
An image viewer à la Twitter

For the latest changes see the CHANGELOG Install CocoaPods pod 'ImageViewer' Carthage github "Krisiacik/ImageViewer" Sample Usage For a detailed examp

Kristian Angyal 2.4k Dec 29, 2022
Slide image viewer library similar to Twitter and LINE.

Overview You can use it simply by passing the necessary information! Serrata is a UI library that allows you to intuitively view images. Features King

Takuma Horiuchi 324 Dec 9, 2022
DGCropImage - A photo cropping tool which mimics Photo.app written by Swift

DGCropImage A photo cropping tool which mimics Photo.app written by Swift. This

donggyu 11 Jul 14, 2022
An iOS/tvOS photo gallery viewer, useful for viewing a large (or small!) number of photos.

This project is unmaintained. Alex passed away in an accident in late 2019. His love of iOS development will always be remembered. AXPhotoViewer AXPho

Alex Hill 596 Dec 30, 2022
Photo-Sharing-App - Photo Sharing App With Swift

Photo Sharing App You can register and log in to this application and share your

Yağız Savran 2 Jun 14, 2022
React-native-photo-editor - Photo editor using native modules for iOS and Android

?? Image editor using native modules for iOS and Android. Inherit from 2 available libraries, ZLImageEditor (iOS) and PhotoEditor (Android)

Baron Ha. 244 Jan 5, 2023
Agrume - 🍋 An iOS image viewer written in Swift with support for multiple images.

Agrume An iOS image viewer written in Swift with support for multiple images. Requirements Swift 5.0 iOS 9.0+ Xcode 10.2+ Installation Use Swift Packa

Jan Gorman 601 Dec 26, 2022
A simple mesh viewer for MacOS based on Swift and Metal and using Assimp for loading meshes

Metal Mesh Viewer A simple triangle mesh viewer for MacOS This application is a simple (triangle) mesh viewer that should be capable of rendering even

J. Andreas Bærentzen 0 Dec 13, 2021
Swift image slideshow with circular scrolling, timer and full screen viewer

?? ImageSlideshow Customizable Swift image slideshow with circular scrolling, timer and full screen viewer ?? Example To run the example project, clon

Petr Zvoníček 1.7k Dec 21, 2022
Swift/iOS viewer for photography galleries or portfolios

Swift/iOS viewer for photography galleries or portfolios. The app is intended for photographers who participate in classical photo clubs: a portfolio covers (curated) images that were presented and critiqued within a photo club.

Peter van den Hamer 8 Dec 24, 2022
iOS photo gallery written in Swift

SwiftPhotoGallery Overview A full screen photo gallery for iOS and tvOS written in Swift. Photos can be panned and zoomed (iOS only) Pinch to zoom (iO

Justin Vallely 271 Dec 17, 2022
Nilay Dagdemir 0 Jan 23, 2022
Image slide-show viewer with multiple predefined transition styles, with ability to create new transitions with ease.

ATGMediaBrowser ATGMediaBrowser is an image slide-show viewer that supports multiple predefined transition styles, and also allows the client to defin

null 200 Dec 19, 2022
Lightbox is a convenient and easy to use image viewer for your iOS app

Lightbox is a convenient and easy to use image viewer for your iOS app, packed with all the features you expect: Paginated image slideshow. V

HyperRedink 1.5k Dec 22, 2022
Image viewer (or Lightbox) with support for local and remote videos and images

Table of Contents Features Focus Browse Rotation Zoom tvOS Setup Installation License Author Features Focus Select an image to enter into lightbox mod

Nes 534 Jan 3, 2023