Latest 0.8.2
Homepage https://github.com/tribalmedia/FMPhotoPicker
License MIT
Platforms ios 9.0
Authors

FMPhotoPicker

MIT licensed
Carthage compatible
Pod Compatible

FMPhotoPicker is a modern, simple and zero-dependency photo picker with an elegant and customizable image editor

Features

  • [x] Support both single and multiple selection
  • [x] Support batch selection/deselection by swipe gesture
  • [x] Support preview
  • [x] Support simple image editor with filter and cropping functions
  • [x] Support force crop mode
  • [x] Support rounded image preview
  • [x] Support adding self-define cropping
  • [x] Support adding self-define filter
  • [x] Support video player
  • [x] Support custom confirmation view
  • [x] Support language customization

Requirements

  • iOS 9.0+

Installation

Carthage

Insert the following line in your Carthfile:

git "[email protected]:tribalmedia/FMPhotoPicker.git"

and run carthage update FMPhotoPicker

CocoaPods

FMPhotoPicker is now available in CocoaPods
You want to add pod ‘FMPhotoPicker’, ‘~> 0.8’ similar to the following to your Podfile:

target 'MyApp' do
  pod 'FMPhotoPicker', '~> 0.8'
end

Then run a pod install inside your terminal.

Usage

Create a configuration object

var config = FMPhotoPickerConfig()

For details, see Configuration

Picker

let picker = FMPhotoPickerViewController(config: config)
picker.delegate = self
self.present(picker, animated: true)

From iOS 10, you have to add the Privacy - Photo Library Usage Description into your Info.plist file.

Editor

let editor = FMImageEditorViewController(config: config, sourceImage: image)
editor.delegate = self
self.present(editor, animated: true)

Delegation methods

  • Implement FMPhotoPickerViewControllerDelegate protocol to handle selected images

    func fmPhotoPickerController(_ picker: FMPhotoPickerViewController, didFinishPickingPhotoWith photos: [UIImage])
  • Implement FMImageEditorViewControllerDelegate protocol to handle ouput image
    func fmImageEditorViewController(_ editor: FMImageEditorViewController, didFinishEdittingPhotoWith photo: UIImage)

Configuration

The configuration supports the following parameters:

Reference

  • mediaTypes
    An array that indicates the media types to be accessed by the picker controller.
    Type: [FMMediaType]
    Default: [.image, .video]

  • selectMode
    Photo selection mode that can be in single or multiple mode.
    Type: : FMSelectMode
    Default is multiple

  • maxImage
    The maximum number of images can be selected.
    Type: Int
    Default: 10

  • maxVideo
    The maximum number of videos can be selected.
    Type: Int
    Default is 10

  • availableFilters
    Filters that are used in editor.
    FMPhotoEditor provides some default filters that will be fit to you.
    Type: [FMFilterable]
    Default: all filters are provided by FMPhotoPicker.

  • availableCrops
    Cropping that is used in editor.
    FMPhotoEditor provides some default crops that will be fit to you.
    Type: [FMCroppable]
    Default: all crops provided by FMPhotoPicker.

  • alertController
    An alert controller to show the confirmation view to an user with 2 options: Ok or Cancel.
    Type: FMAlertable
    Default: FMAlert

  • forceCropEnabled
    A bool value that indicates whether force mode is enabled.
    If true is set, only the first crop in the availableCrops is used in the editor.
    And that crop’s ration becomes force crop ratio.
    Type: FMAlertable
    Default: false

  • eclipsePreviewEnabled
    A bool value that indicates whether the preview of image should be displayed in rounded image.
    Type: Bool
    Default: false

  • strings
    A dictionary that allows you to customize language for your app.
    For details, see FMPhotoPickerConfig.swift
    Type: Dictionary

Customization

Custom filter

You can freely create your own filter by implementing the FMFilterable protocol.

public protocol FMFilterable {
    func filter(image: UIImage) -> UIImage
    func filterName() -> String
}

Be careful that the filterName is used to determine whether the two filters are the same.
Make sure that your filter’s names are not duplicated, especially with the default filters that you want to use.

Custom cropping

Similar as filter function, FMPhotoPicker provides the capability to use your own cropping by implementing the FMCroppable protocol.

public protocol FMCroppable {
    func crop(image: UIImage, toRect rect: CGRect) -> UIImage
    func name(string: [String: String]) -> String
    func icon() -> UIImage
    func ratio() -> FMCropRatio?
}

The func name(strings: [String: String]) -> String will receive the strings configuration from configuration object.
It allows you customize the cropping while keeping all your language setting in only one place.

The name() method is also used as identifier for the cropping.
Thus, make sure you do not have any duplicate of the cropping name.

Custom alert view controller

You can use your own view style for the confirmation view by implementing the FMAlertable protocol.

public protocol FMAlertable {
    func show(in viewController: UIViewController, ok: @escaping () -> Void, cancel: @escaping () -> Void)
}

Apps using FMPhotoPicker

FMPhotoPicker

Author

<code> with ❤️ by Tribal Media House

License

FMPhotoPicker is released under the MIT license. See LICENSE for details.

Latest podspec

{
    "name": "FMPhotoPicker",
    "version": "0.8.2",
    "summary": "A modern, simple and zero-dependency photo picker with an elegant and customizable image editor",
    "homepage": "https://github.com/tribalmedia/FMPhotoPicker",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "Tribal Media House": "[email protected]"
    },
    "platforms": {
        "ios": "9.0"
    },
    "source": {
        "git": "https://github.com/tribalmedia/FMPhotoPicker.git",
        "tag": "0.8.2"
    },
    "source_files": [
        "Classes",
        "FMPhotoPicker/FMPhotoPicker/source/**/*.swift"
    ],
    "resources": [
        "FMPhotoPicker/FMPhotoPicker/source/Assets.xcassets",
        "FMPhotoPicker/FMPhotoPicker/source/**/*.xib"
    ]
}

Pin It on Pinterest

Share This