• Stars
    star
    322
  • Rank 130,398 (Top 3 %)
  • Language
    Swift
  • License
    MIT License
  • Created over 12 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Easily take a photo or video or choose from library

FDTake

CI Status Version License Platform Readme Score

Easily take a photo or video or choose from library

๐Ÿบ Author's tip jar: https://amazon.com/hz/wishlist/ls/EE78A23EEGQB

Usage

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

To use it in your project, add an FDTakeController to your view controller and implement:

fdTakeController.didGetPhoto = {
    (_ photo: UIImage, _ info: [AnyHashable : Any]) in
}

then call:

fdTakeController.present()

The full API is:

/// Public initializer
public override init()

/// Convenience method for getting a photo
open class func getPhotoWithCallback(getPhotoWithCallback callback: @escaping (_ photo: UIImage, _ info: [AnyHashable : Any]) -> Void) -> <<error type>>

/// Convenience method for getting a video
open class func getVideoWithCallback(getVideoWithCallback callback: @escaping (_ video: URL, _ info: [AnyHashable : Any]) -> Void)

/// Whether to allow selecting a photo
open var allowsPhoto: Bool

/// Whether to allow selecting a video
open var allowsVideo: Bool

/// Whether to allow capturing a photo/video with the camera
open var allowsTake: Bool

/// Whether to allow selecting existing media
open var allowsSelectFromLibrary: Bool

/// Whether to allow editing the media after capturing/selection
open var allowsEditing: Bool

/// Whether to use full screen camera preview on the iPad
open var iPadUsesFullScreenCamera: Bool

/// Enable selfie mode by default
open var defaultsToFrontCamera: Bool

/// The UIBarButtonItem to present from (may be replaced by overloaded methods)
open var presentingBarButtonItem: UIBarButtonItem?

/// The UIView to present from (may be replaced by overloaded methods)
open var presentingView: UIView?

/// The UIRect to present from (may be replaced by overloaded methods)
open var presentingRect: CGRect?

/// The UITabBar to present from (may be replaced by overloaded methods)
open var presentingTabBar: UITabBar?

/// The UIViewController to present from (may be replaced by overloaded methods)
open lazy var presentingViewController: UIViewController { get set }

/// A photo was selected
open var didGetPhoto: ((_ photo: UIImage, _ info: [AnyHashable : Any]) -> Void)?

/// A video was selected
open var didGetVideo: ((_ video: URL, _ info: [AnyHashable : Any]) -> Void)?

/// The user did not attempt to select a photo
open var didDeny: (() -> Void)?

/// The user started selecting a photo or took a photo and then hit cancel
open var didCancel: (() -> Void)?

/// A photo or video was selected but the ImagePicker had NIL for EditedImage and OriginalImage
open var didFail: (() -> Void)?

/// Custom UI text (skips localization)
open var cancelText: String?

/// Custom UI text (skips localization)
open var chooseFromLibraryText: String?

/// Custom UI text (skips localization)
open var chooseFromPhotoRollText: String?

/// Custom UI text (skips localization)
open var noSourcesText: String?

/// Custom UI text (skips localization)
open var takePhotoText: String?

/// Custom UI text (skips localization)
open var takeVideoText: String?

/// Presents the user with an option to take a photo or choose a photo from the library
open func present()

/// Dismisses the displayed view. Especially handy if the sheet is displayed while suspending the app,
open func dismiss()

Other available options are documented at CocoaDocs for FDTake.

How it works

  1. See if device has camera
  2. Create action sheet with appropriate options ("Take Photo" or "Choose from Library"), as available
  3. Localize "Take Photo" and "Choose from Library" into user's language
  4. Wait for response
  5. Bring up image picker with selected image picking method
  6. Default to selfie mode if so configured
  7. Get response, extract image from a dictionary
  8. Dismiss picker, send image to delegate

Support

  • Supports iPhones, iPods, iPads and tvOS (but not tested)
  • Supported languages:
    • English
    • Chinese Simplified
    • Turkish (thanks Suleyman Melikoglu)
    • French (thanks Guillaume Algis)
    • Dutch (thanks Mathijs Kadijk)
    • Chinese Traditional (thanks Qing Ao)
    • German (thanks Lars Hรคuser)
    • Russian (thanks Alexander Zubkov)
    • Norwegian (thanks Sindre Sorhus)
    • Arabic (thanks HadiIOS)
    • Polish (thanks Jacek Kwiecieล„)
    • Spanish (thanks David Jorge)
    • Hebrew (thanks Asaf Siman-Tov)
    • Danish (thanks kaspernissen)
    • Sweedish (thanks Paul Peelen)
    • Portugese (thanks Natan Rolnik)
    • Greek (thanks Konstantinos)
    • Italian (thanks Giuseppe Filograno)
    • Hungarian (thanks Andras Kadar)
    • Please help translate FDTake.strings to more languages
  • Pure Swift support and iOS 8+ required
  • Compile testing running on Travis CI
  • In progress: functional test cases (please help)
  • In progress: UI test cases (please help)

Installation

Add this to your project using Swift Package Manager. In Xcode that is simply: File > Swift Packages > Add Package Dependency... and you're done. Alternative installation options are shown below for legacy projects.

CocoaPods

If you are already using CocoaPods, just add 'FDTake' to your Podfile then run pod install.

Carthage

If you are already using Carthage, just add to your Cartfile:

github "fulldecent/FDTake"

Then run carthage update to build the framework and drag the built FDTake.framework into your Xcode project.

Author

William Entriken, [email protected]

Project scope

This is a mature project and we do not expect to add new features unless something has already become state-of-the-art in other applications. Please be prepared to cite screenshots of other apps before making a feature request.

We support targets for the latest released versions of Xcode, Carthage, CocoaPods and Swift Package Manager. If there are incompatabilities, for example CocoaPods not supporting the latest version of Xcode, then we will only support the latest released versions/combinations that are supported. If you would like to support pre-release versions of these packages, please open a pull request, not an issue.

License

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

Contributing

This project's layout is based on https://github.com/fulldecent/swift4-module-template If you would like to change the layout, please change that project FIRST. Also you may appreciate that project has "recipes" -- you don't just change the code, you explain why you are doing things. As a maintainer this makes my job MUCH simpler. In a similar respect, if you are introducing non-minor changes, it will be VERY helpful if you could please reference to another project (like AlamoFire) that has seen and discussed the types of design challenges you are touching.) Thanks again and we all really do appreciate your contributions.

More Repositories

1

system-bus-radio

Transmits AM radio on computers without radio transmitting hardware.
C
6,163
star
2

FDWaveformView

Reads an audio file and displays the waveform
Swift
1,242
star
3

swift5-module-template

An opinionated starting point for awesome, reusable Swift 5 modules
Swift
441
star
4

FDSoundActivatedRecorder

Start recording when the user speaks
Swift
278
star
5

corelocationcli

Command line program to print location information from CoreLocation
Swift
218
star
6

FDChessboardView

An iOS / Mac view controller for chess boards
Swift
77
star
7

formant-analyzer

iOS application for finding formants in spoken sounds
Swift
51
star
8

spend-ERC20-create-ERC721

Tech demo: customers spend your ERC-20 tokens to create their ERC-721 certificates
Solidity
49
star
9

cameralife

Camera Life -- Run your own photo website
PHP
40
star
10

github-pages-template

An opinionated starting point and build system for awesome, collaboratively-edited HTML websites
JavaScript
34
star
11

opensea-shared-storefront-backdoor

Demonstration of a backdoor in OpenSea Shared Storefront
JavaScript
30
star
12

FDTextFieldTableViewCell

A UITableViewCell with an editable text field
Swift
26
star
13

FDBarGauge

The successor to F3BarGauge
Swift
25
star
14

google-voice-numbers

Retrieves the full list of available Google Voice numbers and finds the best ones
HTML
24
star
15

erc721-example

A scalable example of the ERC-721 standard
Solidity
19
star
16

solidity-template

The starting point for every Solidity project
Solidity
18
star
17

19-questions

A machine learning / bayesian inference engine assigning attributes to objects
PHP
16
star
18

eavesdrop

Listen in on TCP conversations on the network your computer is attached to
Objective-C
16
star
19

google-sheets-etl

Live import all your Google Sheets to your data warehouse
PHP
15
star
20

8-ball

A delightfully simple iOS + watchOS app for answering questions
Swift
14
star
21

freescout-sidebar-webhook

Sidebar Webhook asynchronously injects HTML from your server into conversation sidebars
PHP
14
star
22

philadelphia-traffic-court-rtk

Every traffic violation in the city of Philadelphia issued from 2006 to 2014
Python
12
star
23

pro-penetration

Penetration research against NSFW websites
PHP
11
star
24

structured-acceptance-test

An open format definition for static analysis tools
Ruby
10
star
25

lightning-sites

โ˜๏ธ Lightning deployment for your ~/Sites folders
Ruby
10
star
26

footballbetting

Automatically exported from code.google.com/p/footballbetting
9
star
27

pizzaman

The iOS game
Swift
8
star
28

contract-scanner

A tool to find all NFT contracts on an EVM blockchain
JavaScript
6
star
29

linkbuilding-spider

A PHP project to check if websites are linking to your website
PHP
6
star
30

web-puc

Validate your web project uses the latest CSS & JS includes
Ruby
6
star
31

custodial721

A token that holds other tokens / Can also create and transfer 721s in batch
5
star
32

pawn-bfs

A breadth-first enumeration of all reachable chess diagrams
C
5
star
33

solidity-monolithic-flattener

A tool to flatten solidity contracts for runtime optimization
4
star
34

html-proofer-mailto_awesome

A custom html-proofer test that makes your mailto links awesome
Ruby
3
star
35

thin-pdo

A minimal wrapper for PHP's PDO class to make database access easier
PHP
3
star
36

fedex-ship-manager-api

Documentation for hidden FedEx Ship Managerยฎ API
HTML
3
star
37

voicemail-remote

Continuously update your voicemail outgoing message
Shell
3
star
38

live-testing-with-estimateGas

Code examples from the article published with 0xcert
HTML
3
star
39

aion-aip040

Reference implementation for Aion non-fungible tokens
Java
3
star
40

podcast.phor.net

HTML
2
star
41

chess-upper-bound-armies

An upper bound of Chess positions by counting army configurations
C
2
star
42

Nineteen-Eighty-Five

A novel by William Entriken, based on the public domain work of George Orwell
CSS
2
star
43

wrapped-number-board

Solidity
2
star
44

tmp-swift5-module

Swift
2
star
45

versioned_database_template

A demonstration of versioned, hashable, attestable databases
2
star
46

sillyutility.net

Compare Utility Bills With Neighbors.
HTML
2
star
47

echo

The best way to practice speaking English or Spanish
Swift
2
star
48

alephcrypto.xyz

https://alephcrypto.xyz
HTML
2
star
49

septa-regionalrail-otp

These reports use every train's arrival time from 2009 until present to recommend schedule changes for chronically late service
HTML
2
star
50

you-cant-leave-this-page

Proof of concept where you can't leave a web page
HTML
1
star
51

phor.net

HTML
1
star
52

aip-xxx-implementation

Java playground illustrating all best practices for Aion development
Java
1
star
53

open-location-code-wiki

1
star
54

vulnerability-demo.justjavac.com

https://privacylog.blogspot.com/2021/04/upcoming-event-zero-day-live-2021-05-01.html
1
star
55

jump-qrs

QR codes which redirect to a destination website as configured in this repository
HTML
1
star
56

rubygems-issue-6214

1
star
57

e-zpass-v-toll-batch-dispute

Documentation to quickly dispute E-ZPass V-TOLL violations
1
star
58

beginner-project-php-sql

You will learn to create your first meaningful PHP project which connects to a database
1
star
59

blog.phor.net

William Entriken Blog โ€” Analysis of all
CSS
1
star
60

blackjack-simulator

JavaScript implementation of blackjack rules and player betting strategies
C
1
star
61

qr-radiation

An optimizer that makes your QR code look like a target graphic by manipulating your URL
JavaScript
1
star
62

impostor

Who's the impostor?
HTML
1
star