AXPhotoViewer alternatives and similar libraries
Based on the "Images" category.
Alternatively, view AXPhotoViewer alternatives based on common mentions on social networks and blogs.
-
SDWebImage
Asynchronous image downloader with cache support as a UIImageView category -
Kingfisher
A lightweight, pure-Swift library for downloading and caching images from the web. -
SwiftGen-Assets
The Swift code generator for your assets, storyboards, Localizable.strings, … — Get rid of all String-based APIs! -
GPUImage 2
GPUImage 2 is a BSD-licensed Swift framework for GPU-accelerated video and image processing. -
HanekeSwift
A lightweight generic cache for iOS written in Swift with extra love for images. -
YPImagePicker
📸 Instagram-like image picker & filters for iOS -
SkyFloatingLabelTextField
A beautiful and flexible text field control implementation of "Float Label Pattern". Written in Swift. -
AlamofireImage
AlamofireImage is an image component library for Alamofire -
UIImageColors
Fetches the most dominant and prominent colors from an image. -
Brightroom
📷 A composable image editor using Core Image and Metal. [Moved to: https://github.com/FluidGroup/Brightroom] -
GPUImage 3
GPUImage 3 is a BSD-licensed Swift framework for GPU-accelerated video and image processing using Metal. -
APNGKit
High performance and delightful way to play with APNG format in iOS. -
TinyCrayon
A smart and easy-to-use image masking and cutout SDK for mobile apps. -
Lightbox
:milky_way: A convenient and easy to use image viewer for your iOS app -
SwiftGif
[UNMAINTAINED] 🌠 A small UIImage extension with gif support -
Sharaku
(Not maintained)Image filtering UI library like Instagram. -
CTPanoramaView
A library that displays spherical or cylindrical panoramas with touch or motion based controls. -
ImageScout
A Swift implementation of fastimage. Supports PNG, GIF, and JPEG. -
FMPhotoPicker
A modern, simple and zero-dependency photo picker with an elegant and customizable image editor -
PassportScanner
Scan the MRZ code of a passport and extract the firstname, lastname, passport number, nationality, date of birth, expiration date and personal numer. -
Viewer
Image viewer (or Lightbox) with support for local and remote videos and images -
XAnimatedImage
XAnimatedImage is a performant animated GIF engine for iOS written in Swift based on FLAnimatedImage -
JLStickerTextView
add text(multiple line support) to imageView, edit, rotate or resize them as you want, then render the text on image -
UIImageView-BetterFace-Swift
autoresize images and if any face discovered refine the position of the image. -
MapleBacon
🍁🥓 Lightweight and fast Swift library for image downloading, caching and transformations -
Moa
An image download extension of the image view written in Swift for iOS, tvOS and macOS. -
KFSwiftImageLoader
An extremely high-performance, lightweight, and energy-efficient pure Swift async web image loader with memory and disk caching for iOS and Watch. -
MCScratchImageView
A custom ImageView that is used to cover the surface of other view like a scratch card, user can swipe the mulch to see the view below. -
ImageLoader
A lightweight and fast image loader for iOS written in Swift. -
FacebookImagePicker
FacebookImagePicker is Facebook album photo picker written in Swift. -
DTPhotoViewerController
A fully customizable photo viewer ViewController to display single photo or collection of photos, inspired by Facebook photo viewer. -
ImageDetect
✂️ Detect and crop faces, barcodes and texts in image with iOS 11 Vision api. -
SwiftColorArt
font schema generator according image colours. -
Harbeth
Metal API for GPU accelerated Image and Video and Camera filter framework. Support macOS & iOS. 🎨 图像、视频、相机滤镜框架 -
LetterAvatarKit
📲 Use this extension 🧩 to create letter-based avatars or placeholders 🎭 to be utilized within your app
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of AXPhotoViewer or a related project?
README
This project is unmaintained.
Alex passed away in an accident in late 2019. His love of iOS development will always be remembered.
AXPhotoViewer 
AXPhotoViewer is an iOS/tvOS photo viewer that is useful for viewing a very large (or very small!) amount of images and GIFs. This library supports contextual presentation and dismissal, interactive "flick-to-dismiss" behavior, and easily integrates with many third party async image downloading/caching libraries.
How to use
While AXPhotoViewer has many configurable properties on each of its modules, it is easy to throw down some initialization code and get started:
let dataSource = AXPhotosDataSource(photos: self.photos)
let photosViewController = PhotosViewController(dataSource: dataSource)
self.present(photosViewController, animated: true)
Force touch implementation?
It's easy to implement force touch with this library by using PreviewingPhotosViewController
:
func previewingContext(_ previewingContext: UIViewControllerPreviewing,
viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = self.tableView.indexPathForRow(at: location),
let cell = self.tableView.cellForRow(at: indexPath),
let imageView = cell.imageView else {
return nil
}
previewingContext.sourceRect = self.tableView.convert(imageView.frame, from: imageView.superview)
let dataSource = AXPhotosDataSource(photos: self.photos, initialPhotoIndex: indexPath.row)
let previewingPhotosViewController = PreviewingPhotosViewController(dataSource: dataSource)
return previewingPhotosViewController
}
func previewingContext(_ previewingContext: UIViewControllerPreviewing,
commit viewControllerToCommit: UIViewController) {
if let previewingPhotosViewController = viewControllerToCommit as? PreviewingPhotosViewController {
self.present(PhotosViewController(from: previewingPhotosViewController), animated: false)
}
}
Objective-C interoperability
This library fully supports interop between Objective-C and Swift codebases. If you run into any issues with this, please open a Github issue or submit a pull request with the suggested changes.
Installation
Installation can easily be done through Cocoapods:
pod install 'AXPhotoViewer'
If you prefer not to use Cocoapods, add the contents of the 'Source' directory to your project to get started.
Note: If you don't use Cocoapods, you must add MobileCoreServices.framework
, QuartzCore.framework
, and ImageIO.framework
to your project.
Configuration
There are many configurable properties that can be set before presenting your AXPhotosViewController
.
For example, on the AXPhotoDataSource
object, you may set up the data source with an initial page index, as well as being able to control the rate at which the library will download additional photos.
let photos = [first, second]
let dataSource = AXPhotosDataSource(photos: photos, initialPhotoIndex: 1, prefetchBehavior: .aggressive)
On the AXPagingConfig
object, you may set up the configuration with a different navigation orientation (horizontal vs vertical scrolling between pages), inter-photo spacing (the spacing, in points, between each photo), and/or a custom loading view class that will be instantiated by the library as needed.
let pagingConfig = AXPagingConfig(navigationOrientation: .horizontal, interPhotoSpacing: 20, loadingViewClass: CustomLoadingView.self)
Lastly, but surely not least, is the AXTransitionInfo
configuration. This can be used to customize all things related to the presentation and dismissal of your AXPhotosViewController
, including the starting reference view, the ending reference view, the duration of the animations, and a flag to disable/enable interactive dismissals.
let transitionInfo = AXTransitionInfo(interactiveDismissalEnabled: false, startingView: self.startingImageView) { [weak self] (photo, index) -> UIImageView? in
// this closure can be used to adjust your UI before returning an `endingImageView`.
return self?.endingImageView
}
Custom views
It's very simple to add a custom self-sizing view to the view hierarchy of the photo viewer by accessing properties on the OverlayView
. The topStackContainer
and bottomStackContainer
are exactly what they sound like, anchored to either the top or bottom of the overlay. All that is necessary to add your custom view to these containers is the following:
photosViewController.overlayView.topStackContainer.addSubview(customSubview1)
photosViewController.overlayView.bottomStackContainer.addSubview(customSubview2)
These views will be sized and stacked in the order that they are added. It's possible to re-order these subviews to fit your needs.
Network Integrations
A network integration, in relation to this library, is a class conforming to the AXNetworkIntegration
protocol. This protocol defines some methods to be used for downloading images, as well as delegating their completions (and errors) to the library. If you wish to create your own module for async downloading/caching of images and gifs, the protocol is fairly lightweight.
Some pre-defined AXNetworkIntegrations
have already been made as Cocoapod subspecs (SDWebImage, PINRemoteImage, AFNetworking, Kingfisher, Nuke..., as well as a simple network integration using NSURLSession that will serve most people's purposes quite sufficiently). To use these pre-defined subspecs, simply change your Podfile
:
pod install 'AXPhotoViewer/Lite'
pod install 'AXPhotoViewer/SDWebImage'
pod install 'AXPhotoViewer/PINRemoteImage'
pod install 'AXPhotoViewer/AFNetworking'
pod install 'AXPhotoViewer/Kingfisher'
pod install 'AXPhotoViewer/Nuke'
To create your own AXNetworkIntegration
:
pod install 'AXPhotoViewer/Core'
let customNetworkIntegration = CustomNetworkIntegration() // instantiate your custom network integration
let dataSource = AXPhotosDataSource(photos: self.photos)
let photosViewController = PhotosViewController(dataSource: dataSource, networkIntegration: customNetworkIntegration)
Enabling Nuke's support for GIFs
Nuke's support for downloading GIFs is disabled by default. If you want support for GIFs, you have to enabled it.
ImagePipeline.Configuration.isAnimatedImageDataEnabled = true
More details here: Nuke animated images
Customization
As mentioned earlier, there are many configurable properties on each of the modules of the photo viewer, and you can access those modules through the AXPhotosViewController
. For instance, you may replace the default loading view, caption view, and/or overlay title view with your own. These views must be self sizing, and conform to the AXLoadingViewProtocol
, AXCaptionViewProtocol
, and AXOverlayTitleViewProtocol
respectively.
let pagingConfig = AXPagingConfig(loadingViewClass: CustomLoadingView.self) // custom loading view class to be instantiated as necessary
...
photosViewController.overlayView.captionView = CustomCaptionView() // custom caption view
photosViewController.overlayView.titleView = CustomTitleView() // custom title view
The AXPhotosViewController
and its modules are very extensible, so subclassing each is an easy feat to accomplish without breaking other areas of the library.
Contributions
If you see something you would like changed, I'm open to ideas! Open a Github issue if you see something wrong, or fork the repo and open a pull request with your changes. I'd be happy to look them over!