📷 multiple phassets picker for iOS lib. like a facebook

Related tags

Image TLPhotoPicker
Overview

Version License Platform Swift

Written in Swift 5.0

TLPhotoPicker enables application to pick images and videos from multiple smart album in iOS, similar to the current facebook app.

Demo 🙉

Facebook Picker TLPhotoPicker
Facebook Picker TLPhotoPicker

Features

  • support smart album collection.
    • camera roll, selfies, panoramas, favorites, videos, custom users album
  • selected order index.
  • playback video and live photos.
    • just one. playback first video or live Photo in bounds of visible cell.
  • display video duration.
  • async phasset request and displayed cell.
    • scrolling performance is better than facebook in displaying video assets collection.
  • custom cell
  • custom display and selection rules
  • reload of changes that occur in the Photos library.
  • support iCloud Photo Library
  • adds long press preview to images. ( to @smeshko ) Preview
Smart album collection LivePhotoCell VideoPhotoCell PhotoCell CustomCell(instagram)
Facebook Picker LivePhotoCell VideoPhotoCell PhotoCell PhotoCell

Custom Camera Cell

Live CameraCell
Like Line

Installation

Requirements

  • Swift 5.0 ( Swift 4.2 -> use 'version 1.8.3' )
  • iOS 9.1 (for use live photos)

Cocoapods

TLPhotoPicker is available through CocoaPods. To install it, simply add the following line to your Podfile:

platform :ios, '9.1'
pod "TLPhotoPicker"

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa.

Specify TLPhotoPicker into your project's Cartfile:

github "tilltue/TLPhotoPicker"

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler. It is in early development, but TLPhotoPicker does support its use on supported platforms.

Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/tilltue/TLPhotoPicker.git", .upToNextMajor(from: "2.1.0"))
]

Don't forget the Privacy Description in info.plist.

iOS 14 You can suppress the automatic prompting from the system by setting this key to yes in your apps info plist. PHPhotoLibraryPreventAutomaticLimitedAccessAlert = YES https://developer.apple.com/videos/play/wwdc2020/10641/

Usage

use delegate

You can choose delegate method or closure for handle picker event.

class ViewController: UIViewController,TLPhotosPickerViewControllerDelegate {
    var selectedAssets = [TLPHAsset]()
    @IBAction func pickerButtonTap() {
        let viewController = TLPhotosPickerViewController()
        viewController.delegate = self
        var configure = TLPhotosPickerConfigure()
        //configure.nibSet = (nibName: "CustomCell_Instagram", bundle: Bundle.main) // If you want use your custom cell..
        self.present(viewController, animated: true, completion: nil)
    }
    //TLPhotosPickerViewControllerDelegate
    func shouldDismissPhotoPicker(withTLPHAssets: [TLPHAsset]) -> Bool {
        // use selected order, fullresolution image
        self.selectedAssets = withTLPHAssets
	return true
    }
    func dismissPhotoPicker(withPHAssets: [PHAsset]) {
        // if you want to used phasset. 
    }
    func photoPickerDidCancel() {
        // cancel
    }
    func dismissComplete() {
        // picker viewcontroller dismiss completion
    }
    func canSelectAsset(phAsset: PHAsset) -> Bool {
        //Custom Rules & Display
        //You can decide in which case the selection of the cell could be forbidden. 
    }
    func didExceedMaximumNumberOfSelection(picker: TLPhotosPickerViewController) {
        // exceed max selection
    }
    func handleNoAlbumPermissions(picker: TLPhotosPickerViewController) {
        // handle denied albums permissions case
    }
    func handleNoCameraPermissions(picker: TLPhotosPickerViewController) {
        // handle denied camera permissions case
    }
}

use closure

    init(withPHAssets: (([PHAsset]) -> Void)? = nil, didCancel: ((Void) -> Void)? = nil)
    init(withTLPHAssets: (([TLPHAsset]) -> Void)? = nil, didCancel: ((Void) -> Void)? = nil)
    var canSelectAsset: ((PHAsset) -> Bool)? = nil
    var didExceedMaximumNumberOfSelection: ((TLPhotosPickerViewController) -> Void)? = nil
    var handleNoAlbumPermissions: ((TLPhotosPickerViewController) -> Void)? = nil
    var handleNoCameraPermissions: ((TLPhotosPickerViewController) -> Void)? = nil
    var dismissCompletion: (() -> Void)? = nil
class ViewController: UIViewController,TLPhotosPickerViewControllerDelegate {
    var selectedAssets = [TLPHAsset]()
    @IBAction func pickerButtonTap() {
        let viewController = TLPhotosPickerViewController(withTLPHAssets: { [weak self] (assets) in // TLAssets
            self?.selectedAssets = assets
        }, didCancel: nil)
        viewController.didExceedMaximumNumberOfSelection = { [weak self] (picker) in
            //exceed max selection
        }
        viewController.handleNoAlbumPermissions = { [weak self] (picker) in
            // handle denied albums permissions case
        }
        viewController.handleNoCameraPermissions = { [weak self] (picker) in
            // handle denied camera permissions case
        }
        viewController.selectedAssets = self.selectedAssets
        self.present(viewController, animated: true, completion: nil)
    }
}

Custom Cell Custom Cell must subclass TLPhotoCollectionViewCell

class CustomCell_Instagram: TLPhotoCollectionViewCell {

}

//If you want custom camera cell?
//only used camera cell
[Sample](https://github.com/tilltue/TLPhotoPicker/blob/master/Example/TLPhotoPicker/CustomCameraCell.swift)

//Adding the possibility to handle cell display according to a specific conditions
func update(with phAsset: PHAsset)
func selectedCell()
func willDisplayCell()
func endDisplayingCell()

Custom Rules & Display

You can implement your own rules to handle the cell display. You can decide in which case the selection of the cell could be forbidden.

For example, if you want to disable the selection of a cell if its width is under 300, you can follow these steps:

  • Override the update method of your custom cell and add your own display rule
override func update(with phAsset: PHAsset) {
    super.update(with: phAsset)
    self.sizeRequiredOverlayView?.isHidden = !(phAsset.pixelHeight <= 300 && phAsset.pixelWidth <= 300)
}

In this code, we show an overlay when the height and width required values are not satisified.

  • When you instanciate a TLPhotosPickerViewController subclass, you can pass a closure called canSelectAsset to handle the selection according to some rules. ( or delegate)
//use delegate 
public protocol TLPhotosPickerViewControllerDelegate: class {
    ...
    func canSelectAsset(phAsset: PHAsset) -> Bool
    ...
}

extension UserViewController: TLPhotosPickerViewControllerDelegate {
    func canSelectAsset(phAsset: PHAsset) -> Bool {
        if asset.pixelHeight < 100 || asset.pixelWidth < 100 {
            self?.showUnsatisifiedSizeAlert(vc: viewController)
            return false
        }
        return true
    }
}

//or use closure
viewController.canSelectAsset = { [weak self] asset -> Bool in
    if asset.pixelHeight < 100 || asset.pixelWidth < 100 {
        self?.showUnsatisifiedSizeAlert(vc: viewController)
        return false
    }
    return true
}

In this code, we show an alert when the condition in the closure are not satisfiied.

TLPHAsset

public struct TLPHAsset {
    public enum AssetType {
        case photo,video,livePhoto
    }
    // phasset 
    public var phAsset: PHAsset? = nil
    // selected order index
    public var selectedOrder: Int = 0
    // asset type
    public var type: AssetType
    // get full resolution image 
    public var fullResolutionImage: UIImage?
    // get photo file size (async)
    public func photoSize(options: PHImageRequestOptions? = nil ,completion: @escaping ((Int)->Void), livePhotoVideoSize: Bool = false)
    // get video file size (async)
    public func videoSize(options: PHVideoRequestOptions? = nil, completion: @escaping ((Int)->Void))
    // get async icloud image (download)
    @discardableResult
    public func cloudImageDownload(progressBlock: @escaping (Double) -> Void, completionBlock:@escaping (UIImage?)-> Void ) -> PHImageRequestID?
    // get original media file async copy temporary media file ( photo(png,gif...etc.) and video ) -> Don't forget, You should delete temporary file.
    // parmeter : convertLivePhotosToJPG
    // false : If you want mov file at live photos
    // true  : If you want png file at live photos ( HEIC )
    public func tempCopyMediaFile(videoRequestOptions: PHVideoRequestOptions? = nil, 
                                  imageRequestOptions: PHImageRequestOptions? = nil,
                                  livePhotoRequestOptions: PHLivePhotoRequestOptions? = nil,
                                  exportPreset: String = AVAssetExportPresetHighestQuality, 
                                  convertLivePhotosToJPG: Bool = false, 
                                  progressBlock:((Double) -> Void)? = nil, 
                                  completionBlock:@escaping ((URL,String) -> Void)) -> PHImageRequestID?
    //Apparently, This is not the only way to export video.
    //There is many way that export a video.
    //This method was one of them.
    public func exportVideoFile(options: PHVideoRequestOptions? = nil,
                                outputURL: URL? = nil,
                                outputFileType: AVFileType = .mov,
                                progressBlock:((Double) -> Void)? = nil,
                                completionBlock:@escaping ((URL,String) -> Void))
    // get original asset file name
    public var originalFileName: String?
}

Note: convenience export method fullResolutionImage, cloudImageDownload, tempCopyMediaFile, exportVideoFile It's not enough if you wanted to use more complicated export asset options. ( progress, export type, etc..)

Customize

let viewController = TLPhotosPickerViewController()
var configure = TLPhotosPickerConfigure()
viewController.configure = configure

public struct TLPhotosPickerConfigure {
    public var customLocalizedTitle: [String: String] = ["Camera Roll": "Camera Roll"] // Set [:] if you want use default localized title of album
    public var tapHereToChange = "Tap here to change"
    public var cancelTitle = "Cancel"
    public var doneTitle = "Done"
    public var emptyMessage = "No albums"
    public var emptyImage: UIImage? = nil
    public var usedCameraButton = true
    public var usedPrefetch = false
    public var previewAtForceTouch = false
    public var allowedLivePhotos = true
    public var allowedVideo = true
    public var allowedAlbumCloudShared = false
    public var allowedPhotograph = true // for camera : allow this option when you want to take a photos
    public var allowedVideoRecording = true //for camera : allow this option when you want to recording video.
    public var recordingVideoQuality: UIImagePickerControllerQualityType = .typeMedium //for camera : recording video quality
    public var maxVideoDuration:TimeInterval? = nil //for camera : max video recording duration
    public var autoPlay = true
    public var muteAudio = true
    public var preventAutomaticLimitedAccessAlert = true // newest iOS 14
    public var mediaType: PHAssetMediaType? = nil
    public var numberOfColumn = 3
    public var singleSelectedMode = false
    public var maxSelectedAssets: Int? = nil //default: inf
    public var fetchOption: PHFetchOptions? = nil //default: creationDate
    public var fetchCollectionOption: [FetchCollectionType: PHFetchOptions] = [:] 
    public var singleSelectedMode = false
    public var selectedColor = UIColor(red: 88/255, green: 144/255, blue: 255/255, alpha: 1.0)
    public var cameraBgColor = UIColor(red: 221/255, green: 223/255, blue: 226/255, alpha: 1)
    public var cameraIcon = TLBundle.podBundleImage(named: "camera")
    public var videoIcon = TLBundle.podBundleImage(named: "video")
    public var placeholderIcon = TLBundle.podBundleImage(named: "insertPhotoMaterial")
    public var nibSet: (nibName: String, bundle:Bundle)? = nil // custom cell
    public var cameraCellNibSet: (nibName: String, bundle:Bundle)? = nil // custom camera cell
    public var fetchCollectionTypes: [(PHAssetCollectionType,PHAssetCollectionSubtype)]? = nil
    public var groupByFetch: PHFetchedResultGroupedBy? = nil // cannot be used prefetch options
    public var supportedInterfaceOrientations: UIInterfaceOrientationMask = .portrait
    public var popup: [PopupConfigure] = []
    public init() {
    }
}

//Related issue: https://github.com/tilltue/TLPhotoPicker/issues/201
//e.g.
//let option = PHFetchOptions()
//configure.fetchCollectionOption[.assetCollections(.smartAlbum)] = option
//configure.fetchCollectionOption[.assetCollections(.album)] = option
//configure.fetchCollectionOption[.topLevelUserCollections] = option

public enum FetchCollectionType {
    case assetCollections(PHAssetCollectionType)
    case topLevelUserCollections
}

public enum PopupConfigure {
    //Popup album view animation duration
    case animation(TimeInterval)
}

// PHFetchedResultGroupedBy
//
// CGrouped by date, cannot be used prefetch options
// take about few seconds ( 5000 image iPhoneX: 1 ~ 1.5 sec ) 
public enum PHFetchedResultGroupedBy {
    case year
    case month
    case week
    case day
    case hour
    case custom(dateFormat: String)
}

//customizable photos picker viewcontroller
class CustomPhotoPickerViewController: TLPhotosPickerViewController {
    override func makeUI() {
        super.makeUI()
        self.customNavItem.leftBarButtonItem = UIBarButtonItem.init(barButtonSystemItem: .stop, target: nil, action: #selector(customAction))
    }
    func customAction() {
        self.dismiss(animated: true, completion: nil)
    }
}

//for log
public protocol TLPhotosPickerLogDelegate: class {
    func selectedCameraCell(picker: TLPhotosPickerViewController)
    func deselectedPhoto(picker: TLPhotosPickerViewController, at: Int)
    func selectedPhoto(picker: TLPhotosPickerViewController, at: Int)
    func selectedAlbum(picker: TLPhotosPickerViewController, title: String, at: Int)
}

//for collection supplement view 
let viewController = TLPhotosPickerViewController()
viewController.customDataSouces = CustomDataSources() // inherit TLPhotopickerDataSourcesProtocol

public protocol TLPhotopickerDataSourcesProtocol {
    func headerReferenceSize() -> CGSize
    func footerReferenceSize() -> CGSize
    func registerSupplementView(collectionView: UICollectionView)
    func supplementIdentifier(kind: String) -> String
    func configure(supplement view: UICollectionReusableView, section: (title: String, assets: [TLPHAsset]))
}

Author

Does your organization or project use TLPhotoPicker? Please let me know by email.

wade.hawk, [email protected]

License

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

Comments
  • Adding the possibility to fix a required size

    Adding the possibility to fix a required size

    Hi,

    In my application, I had to ignore some photos with unsatisfied size, that’s why I create this pull request.

    Firstly, I added two configurations: public var requiredSize: CGSize?.

    So, in the cellForItemAt method for collection view, I used the phAsset. pixelHeight and phAsset. pixelWidth to check the size.

    If the size is not conformed to requiredSize, I set the property (a new property) unsatisfiedSize for TLPhotoCollectionViewCell to false.

    When this property is set and in the didSet method, I check if the value is true or false and according to this value, I show or not an overlay with the current image size.

    On cell selection, if this property (unsatisfiedSize) is set to false, I show a message in an alert. The title of this alert and the message can be configured with these two new configurations: unsatisifiedSizeTitle and unsatisifiedSizeMessage

    opened by aliabbas90 18
  • Support for Objective C projects.

    Support for Objective C projects.

    Is it possible to support the integration of TLPhotoPicker with Objective C projects as well? We are unable to use TLPHAssets in Objective C class because it is a struct and Swift structs are not accessible via Objective C classes.

    opened by rizwan95 15
  • func dismissPhotoPicker(withTLPHAssets: [TLPHAsset]){} doesn't call in TLPhotosPickerViewControllerDelegate

    func dismissPhotoPicker(withTLPHAssets: [TLPHAsset]){} doesn't call in TLPhotosPickerViewControllerDelegate

    Xcode show varning "Instance method 'dismissPhotoPicker(withTLPHAssets:)' nearly matches defaulted requirement 'dismissPhotoPicker(withPHAssets:)' of protocol 'TLPhotosPickerViewControllerDelegate'"

    opened by Denismih 11
  • Crash in singleSelectedMode

    Crash in singleSelectedMode

    In the single mode, selecting the second photo is crashing Tag version: 1.9.9, 2.0.4 Xcode: 11.1, xcode10 iOS: 13.1.2, 12.0.1

    Added: Appears when usedPrefetch = false. True is normal, but the style has changed.

    opened by chaosVoid 10
  • Update to Swift5 and fix compiler warnings. Fix a threading issue resulting in crash.

    Update to Swift5 and fix compiler warnings. Fix a threading issue resulting in crash.

    Project updated to Swift 5. Compiler warnings fixed. Also, makes image retrieval process more logical (updates requestIDs on the same thread) and fixes a crash if scrolling quickly over many iCloud-located images.

    opened by mbarashkov 9
  • iOS 13 dark mode issue

    iOS 13 dark mode issue

    Thank you for the great library and quick response (as always)!

    There seems to be 2 issues with the dark mode implementation:

    1. The top tip remains white (minor issue)
    2. There's a white strip on the left for like 5-10pt.

    I've attached a screenshot here. Would love to get a fix!

    IMG_FC1A650C1785-1

    opened by danqing 8
  • Change the AVAssetExportPreset Quality

    Change the AVAssetExportPreset Quality

    Hi Please let us change the AVAssetExportPresetHighestQuality to AVAssetExportPresetPassthrough in tempCopyMediaFile() by declaring in TLPhotosPickerConfigure? My app only need to get the original video without convert.

    opened by kfung0426 8
  • Objective-C Import

    Objective-C Import

    Hello all, thanks for this great library. I'm having trouble using the library with objective c. I've added the objective-c branch to the Podfile as follows: pod "TLPhotoPicker", :git => 'https://github.com/tilltue/TLPhotoPicker.git', :branch => 'objective-c'

    I tried importing the library using: @import TLPhotoPicker; and #import "TLPhotoPicker-Swift.h"

    However either way I can only access TLPhotosPickerViewController; delegates and other classes do not seem accessible. I definitely can't run the objective-c sample code specified in the README. Am I doing something wrong?

    Thanks

    opened by Offek 7
  • Crash!!!

    Crash!!!

    App crashes when older pictures are selected. When image /assests older than a month or so are selected it crashes whil trying to return fullresolutionimage from TLPhassets.

    opened by Nick-Ace 7
  • Hey,dear friend,long time no see.

    Hey,dear friend,long time no see.

    How can I disable the done button on the right ,when I selected no pic? In the other words, how can I secure the done button when choose no pic. Thanks.😬

    opened by brandy2015 6
  • iOS 13 crash

    iOS 13 crash

    Hi there again,

    thanks for the great library.

    Here is the error video I got from users. Some of users already upgrade to iOS 13 beta version and they crash when they open the selecting photo page.

    I haven't update my iPhone to iOS 13 yet. Will try to upgrade to iOS 13 as soon as possible to see what's the error is.

    ezgif-1-a648b939d419

    opened by MrFuFuFu 6
  • How to change configure without creating new instance?

    How to change configure without creating new instance?

    Thanks for creating this, it's really good my question is can I change configure parameters at runtime without creating new instance ? e.g. change photoPicker.configure.singleSelectedMode = !photoPicker.configure.singleSelectedMode ?

    opened by FlashTang 0
  • Dear Author, can I get the special ratio with NSPredicate ?

    Dear Author, can I get the special ratio with NSPredicate ?

    let options = PHFetchOptions() options.predicate = NSPredicate(format: "pixelHeight / pixelWidth == %d", 2) configure.fetchOption = options

    It doesn't work.

    Wanna get 1:2 pixelHeight : pixelWidth

    opened by brandy2015 1
  • Photos Button For limit permission is not available

    Photos Button For limit permission is not available

    Hello Team

    Below is step for produce this scenario

    1. Run then application first time
    2. open picker and click on select photos
    3. without any selection click on done then photos button not appear
    opened by yashbarot1240 0
  • Unable to change done button title  ?

    Unable to change done button title ?

    When I select multiple images from galary then its Done button looks likes hanged/stucked. Is there any way to change done button to loading indicator on pressing done button? like whatsapp doing.

    opened by ZaidAhmad2468 0
  • Fixed accessibility support for

    Fixed accessibility support for "Done" button

    Switched button type from "bordered" to "done", which has the same effect as setting attributed text style to bold, but leaves accessibility support (increased font sizes!) intact.

    Additional commit: Updated to latest CocoaPods and Xcode and fixed the version number (Which should be further increased on next submit! - How did you manage to increase the version number at CocoaPods but not in the master podspec file, anyway??)

    opened by tladesignz 1
Releases(2.1.9)
Owner
junhyi park
junhyi park
FLImagePicker - A simple image picker supported multiple selection

FLImagePicker A simple image picker supported multiple selection. Features Multiple selection Gesture supported Dark mode Easy modification Installati

Allen Lee 4 Aug 17, 2022
📸 Instagram-like image picker & filters for iOS

YPImagePicker YPImagePicker is an instagram-like photo/video picker for iOS written in pure Swift. It is feature-rich and highly customizable to match

Yummypets 4k Dec 27, 2022
📸 iMessage-like, Image Picker Controller Provides custom features.

RAImagePicker Description RAImagePicker is a protocol-oriented framework that provides custom features from the built-in Image Picker Edit. Overview O

Rashed Al-Lahaseh 14 Aug 18, 2022
A Shortcuts-like and highly customizable SFSymbol picker written in Swift.

SFTintedIconPicker SFTintedIconPicker is a Shortcuts-like and highly customizable SFSymbol picker written in Swift. Features Native Appearance Search

StephenFang 2 Aug 16, 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
DTPhotoViewerController - A fully customizable photo viewer ViewController to display single photo or collection of photos, inspired by Facebook photo viewer.

DTPhotoViewerController Example Demo video: https://youtu.be/aTLx4M4zsKk DTPhotoViewerController is very simple to use, if you want to display only on

Tung Vo 277 Dec 17, 2022
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
Simple PhotoBrowser/Viewer inspired by facebook, twitter photo browsers written by swift

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

keishi suzuki 2.4k Jan 6, 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
An Xcode 7 plugin to build and run an app across multiple iOS devices with one click.

RunEverywhere Xcode Plugin Overview An Xcode 7 plugin to build and run an app across multiple iOS devices with one click. Gone are the days of manuall

Eric Mika 322 Sep 7, 2022
Image picker with custom crop rect for iOS written in Swift (Ported over from GKImagePicker)

WDImagePicker Ever wanted a custom crop area for the UIImagePickerController? Now you can have it with WDImagePicker. Just set your custom crop area a

Wu Di 96 Dec 19, 2022
Custom iOS camera and photo picker with editing capabilities

Overview Paparazzo is a component for picking and editing photos. Key Features ?? Taking photos using camera ?? Picking photos from user's photo libra

avito.tech 757 Jan 4, 2023
A very useful and unique iOS library to open image picker in just few lines of code.

ImagePickerEasy A very simple solution to implement UIImagePickerController() in your application. Requirements Swift 4.2 and above Installation Image

wajeehulhassan 6 May 13, 2022
WLPhotoPicker - A multifunction photo picker for iOS

WLPhotoPicker Example To run the example project, clone the repo, and run pod in

Weang 20 Nov 25, 2022
FlaneurImagePicker is an iOS image picker that allows users to pick images from different sources (ex: user's library, user's camera, Instagram...). It's highly customizable.

FlaneurImagePicker is a highly customizable iOS image picker that allows users to pick images from different sources (ex: device's library, device's c

FlaneurApp 17 Feb 2, 2020
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
add text(multiple line support) to imageView, edit, rotate or resize them as you want, then render the text on image

StickerTextView is an subclass of UIImageView. You can add multiple text to it, edit, rotate, resize the text as you want with one finger, then render the text on Image.

Textcat 478 Dec 17, 2022
Instant camera hybrid with multiple effects and filters written in Swift.

Kontax Cam Download on the app store! No longer on the app store Kontax Cam is an instant camera built 100% using Swift for iOS. You can take your pho

Kevin Laminto 108 Dec 27, 2022
BeatboxiOS - A sample implementation for merging multiple video files and/or image files using AVFoundation

MergeVideos This is a sample implementation for merging multiple video files and

null 3 Oct 24, 2022