An iOS picker view to serve all your "picking" needs

Related tags

PickerView Mandoline
Overview

Mandoline

Version License Platform BuddyBuild

The PickerView is a UICollectionView that provides a smooth "picking" interface. In order to get the most out of it, a consuming view controller should support the Selectable protocol in the intended UICollectionViewCells that dictates whether a cell isSelectable.

Why would I want to use this library?

If you want to have a boss scrolling experience like this:

Blue Apron Meal Rescheduler

It also has responsive haptic feedback that is generated upon selection and moving across cells.

Note: this view is optimized to display a medium-sized collection, given that its primary offering is allowing a user to scroll to a given cell that may be off the screen. One way to offset this natural requirement is to consider the intended size of the UICollectionViewCell that will be used.

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Installation

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

pod 'Mandoline'

Usage

In the ViewController of use, you can initialize the PickerView like a UIView like so:

let pickerView: PickerView = {
    let view = PickerView()
    view.cellSize = ScrollableCell.cellSize
    return view
}()

You'll also want to set the PickerView's dataSource and delegate to self. Similar to a UICollectionView, be sure to register YourCellClass before the view will appear.

override func viewDidLoad() {
    super.viewDidLoad()

    pickerView.register(cellType: YourCellClass.self)
    pickerView.delegate = self
    pickerView.dataSource = self
}

PickerViewDataSource

The Selectable protocol dictates whether an item is available (isSelectable), as observed by the size of the Overlay's dot.

public protocol Selectable {
    var isSelectable: Bool { get set }
}

The DataSource is an array of Selectable's.

public protocol PickerViewDataSource: class {
    var selectableCells: [Selectable] { get }
}

PickerViewDelegate

The PickerView has a number of UIScrollView and UICollectionView delegate functions that can be called on the view. These are all optional.

func collectionView(_ view: PickerView, didSelectItemAt indexPath: IndexPath) {

}

func scrollViewWillBeginDragging(_ view: PickerView) {

}

func scrollViewWillEndDragging(_ view: PickerView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

}

func scrollViewDidScroll(_ scrollView: UIScrollView) {

}

There is also a configure function that is called in collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell for customization of UICollectionViewCells.

func configure(cell: UICollectionViewCell, for: IndexPath) {

}

Mutable Properties

There are a number of settable properties on the PickerView:

Required

  • cellSize: Set the size of the cell

If the cellSize is not set, the default cellSize from the PickerViewCell is used.

Optional

  • selectedOverlayColor: Change the color of the overlay's border
  • dotColor: Change the color of the dot
  • triangleSize: Change the size of the picker triangle
  • dotSize: Change the size of the dot
  • dotDistanceFromTop: Change the distance of the dot from the top of the UICollectionView
  • backgroundColor: Change the background color of the UICollectionView

Requirements

  • iOS 8+
  • Xcode 8+

License

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

Contributing

Interested in contributing or learning more about the project? Check out our engineering site for more information.

Third-Party Licenses

SnapKit

Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

You might also like...
iOS/macOS media picker for importing images and videos in SwiftUI

iOS/macOS media picker for importing images and videos in SwiftUI.

 🎯 Swift country and phone code Picker
🎯 Swift country and phone code Picker

CountryPicker Picker code Swift 3 / 4 / 5. Example To run the example project, clone the repo, and run pod install from the Example directory first. U

MICountryPicker is a country picker controller for iOS8+ with an option to search.
MICountryPicker is a country picker controller for iOS8+ with an option to search.

MICountryPicker MICountryPicker is a country picker controller for iOS8+ with an option to search. The list of countries is based on the ISO 3166 coun

A drop in single image picker.

PHSingleImagePicker A low memory, single image picker wrapper that provide a significant smaller file size while also preserve high image quality. Int

React-native-place-picker: Pick any place with single click 🚀
React-native-place-picker: Pick any place with single click 🚀

React-native-place-picker: Pick any place with single click 🚀

A SwiftUI implementation of a picker that also allows direct input.
A SwiftUI implementation of a picker that also allows direct input.

ComboPicker ComboPicker is a SwiftUI view that allows users to input a value by selecting from a predefined set or by typing a custom one. Installatio

A μlibrary in Swift containing all the countries with their localized name, ISO code, phone code, country code, flag image and emoji.

CountryKit CountryKit A μlibrary in Swift containing all the countries with their localized name, ISO code, phone code, country code, flag image and e

A simple, customizable view for efficiently collecting country information in iOS apps.
A simple, customizable view for efficiently collecting country information in iOS apps.

CountryPickerView CountryPickerView is a simple, customizable view for selecting countries in iOS apps. You can clone/download the repository and run

Quickly reproduce the dropdown UIPickerView / ActionSheet functionality on iOS.
Quickly reproduce the dropdown UIPickerView / ActionSheet functionality on iOS.

ActionSheetPicker-3.0 Important update Now I fixed most of the things and merge PR' (thanks to ). I did much work to support this library from iOS 5.

Comments
  • compile error

    compile error

    I check the Podfile that this example is using the dynamic framework Mandoline,But there is an compile error: could not read data from '/Users/macache/Downloads/WorkPlace/UI Stuff/Mandoline-master/Example/Pods/Target Support Files/Mandoline/ResourceBundle-Mandoline-Info.plist': The file “ResourceBundle-Mandoline-Info.plist” couldn’t be opened because there is no such file.

    And can not find Mandoline framework. jietu20171102-084004

    opened by sishenyihuba 4
  • Remove SnapKit dependency

    Remove SnapKit dependency

    This PR removes the SnapKit dependency from Mandoline. It's still being used in the example project. I've created a small extension to make creating constraints a little bit more readable.

    opened by fpg1503 1
  • Using Mandoline with SnapKit 4.0.0

    Using Mandoline with SnapKit 4.0.0

    I'm using SnapKit 4.0.0 in my project, and trying to install Mandoline through Cocoapods raises the error:

    [!] Unable to satisfy the following requirements:

    • SnapKit (~> 4.0.0) required by Podfile
    • SnapKit (= 4.0.0) required by Podfile.lock
    • SnapKit (~> 3.2.0) required by Mandoline (1.0.0)
    opened by gabriel-jones 1
Owner
Blue Apron
Blue Apron provides you with all the ingredients that you need to make a delicious meal in exactly the right proportions.
Blue Apron
A SwiftUI List Picker to replace system Picker in List

BetterListPicker An alternative customizable list picker in order to replace built-in non customizable Picker when we write settings view codes. Demo

Jinya 1 Apr 11, 2022
A better SwiftUI Picker Use _Picker instead of Picker

BetterPicker A better SwiftUI Picker. Use _Picker instead of Picker. Create styles with _PickerStyle. The is a WIP This library is currently a work-in

Eric Lewis 17 Dec 14, 2022
a picker view shown as a popup for iOS in Objective-C

CZPicker Demo Change Log 3 most recent changes are listed here. Full change logs v0.4.3 - 2016-08-12 Added - (void)czpickerViewWillDisplay:(CZPickerVi

Chen Zeyu 527 Oct 2, 2022
A country picker view controller for iOS

Planet A country picker view controller for iOS. Installation CocoaPods You can use CocoaPods to install Planet by adding it to your Podfile: platform

kWallet 71 Jul 11, 2022
A simple yet customizable horizontal and vertical picker view

WheelPicker A simple yet customizable horizontal and vertical picker view Features Vertical or Horizontal picker Image or Text data Configure UILabel

Mind Studios 74 Sep 26, 2022
FYPhoto is a photo/video picker and image browser library for iOS written in pure Swift. It is feature-rich and highly customizable to match your App's requirements.

FYPhoto is a photo/video picker and image browser library for iOS written in pure Swift. It is feature-rich and highly customizable to match your App's requirements.

null 10 Dec 11, 2022
LocationPicker - A ready for use and fully customizable location picker for your app

LocationPicker A ready for use and fully customizable location picker for your app. Features Installation Cocoapods Carthage Swift Package Manager Qui

Zhuoran 397 Nov 16, 2022
Date picker dialog for iOS

DatePickerDialog 4.0 - iOS - Swift DatePickerDialog is an iOS drop-in classe that displays an UIDatePicker within an UIAlertView. Requirements DatePic

Squimer 535 Dec 17, 2022
Elegant and Easy-to-Use iOS Swift Date Picker

D2PDatePicker Example To run the example project, clone the repo, and run pod install from the Example directory first. Example Code: Programmatical I

Pradheep Rajendirane 292 Nov 6, 2022
Multi-picker for iOS and Mac available in SwiftUI

Multi-picker for iOS and Mac available in Swift UI

1amageek 5 Jul 12, 2022