 iOS - How to Access Photo Camera and Library in Swift

Updated on October 26, 2017
FV Imagination profile image

Web Designer, iOS, Android mobile apps developer. From Italy with Love.

Please remember to test the code of this tutorial on a real device, because the iOS Simulator doesn't handle the camera.

I have made a demo project that looks like this:


Sample XCode project
Sample XCode project

My sample project has 3 buttons in the main controller:

  • Open Camera
  • Open Photo Library
  • Save

Let’s start by adding the two delegates needed to make this tutorial work, you have to place them into your ViewController class:

class ViewController: UIViewController,
UIImagePickerControllerDelegate,
UINavigationControllerDelegate
{


I have added the image picker and navigation controller delegates to our code, they are included into UIKit framework so you don’t have to import any extra file into your swift page.

In my sample project we had to create an image view too in order to use it later:

      @IBOutlet weak var imagePicked: UIImageView!


Check out the following code, it's the magic that opens the camera on your device:

@IBAction func openCameraButton(sender: AnyObject) {
    if UIImagePickerController.isSourceTypeAvailable(.camera) {
        var imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .camera;
        imagePicker.allowsEditing = false
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}


What does the code above do? We're going to explain it line by line:

  1. An IBAction instance for the button, created by ctrl+drag from the Open Camera button to our ViewController.swift page
  2. Check if the Camera is available on the device (as a source type)
  3. Here we declare a variable of image picker controller
  4. Set its delegate
  5. Set its source type
  6. Here we tell our image picker to not edit a captured picture, which means that we won’t get the black screen with a square frame right after taking a photo.
  7. Finally we present the camera controller, it will show up from the bottom of the screen, which is the default iOS animation for opening new screens.

Run the project, tap the button and you’ll get something like this:

The device asks to access the camera
The device asks to access the camera
You're ready to take a picture
You're ready to take a picture
After you took a photo, you can see its preview. Here you can accept or reject it.
After you took a photo, you can see its preview. Here you can accept or reject it.


Now, let's see how to make Open Photo Library button work:

@IBAction func openPhotoLibraryButton(sender: AnyObject) {
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
        var imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .photoLibrary;
        imagePicker.allowsEditing = true
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
}


Code explanation:

  1. An action for the button, created the same way we did for the previous object
  2. Check if the device is able to access a photo library
  3. Declare another image picker's variable for later use
  4. Set its delegate
  5. Set its source type (the camera roll)
  6. This time we set the property that allows us to edit our picked image as true, which means that we will get a black window with a square frame where we can zoom, move and crop our photo.
  7. Finally we present the photo library controller with a standard animation from the bottom of the screen


Run the project and tap the button, you will get the following results:

Device asks to access the photo library
Device asks to access the photo library
After picking an image, you can crop it or reject it
After picking an image, you can crop it or reject it


We now need to add a delegate to our class, in order to tell our app to get the chosen image and place it into the image view we've placed on the main screen. Please note that the following delegate will be used for both the functions of this template:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    imagePicked.image = image 
    dismiss(animated:true, completion: nil)
}


  1. Our instance of the delegate. One great thing about XCode is that you can start typing "image" and a list of available delegates will show up below the cursor, it helps you pick up the one you need.
  2. Here we set its object as the chosen image from library or camera.
  3. Here we dismiss the controller and get back to our main screen.


We are only missing the Save button method to complete this tutorial:

@IBAction func saveButt(sender: AnyObject) {
    var imageData = UIImageJPEGRepresentation(imagePicked.image, 0.6)
    var compressedJPGImage = UIImage(data: imageData)
    UIImageWriteToSavedPhotosAlbum(compressedJPGImage, nil, nil, nil)
    
    var alert = UIAlertView(title: "Wow",
        message: "Your image has been saved to Photo Library!",
        delegate: nil,
        cancelButtonTitle: "Ok")
    alert.show()
}

Line by line:

  1. IBAction of the button
  2. Here we declare a variable of NSData for our image and compress it to 0.6 quality (you can set this value from 0.0 to 1.0)
  3. Create a new UIImage and pass it the data previously made into it
  4. Simple method to save our picture into camera roll
  5. Here we create an alert and give it a title
  6. a message
  7. no delegate in this case
  8. and a cancel button's title
  9. Tell our UIAlertView to show up


We’re done, you can run the project and play with buttons, after dismissing the image picker controller you will see your chosen image and save it into photo library:

Conclusion

Thanks for reading this tutorial, I hope you enjoyed it.

Don't forget to check out my other articles, as well as my Portfolio on Codecanyon!


© 2015 cubycode

Comments

Submit a Comment

No comments yet.

working

This website uses cookies

As a user in the EEA, your approval is needed on a few things. To provide a better website experience, turbofuture.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: https://turbofuture.com/privacy-policy#gdpr

Show Details
Necessary
HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
LoginThis is necessary to sign in to the HubPages Service.
Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
AkismetThis is used to detect comment spam. (Privacy Policy)
HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
Features
Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
MavenThis supports the Maven widget and search functionality. (Privacy Policy)
Marketing
Google AdSenseThis is an ad network. (Privacy Policy)
Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
Index ExchangeThis is an ad network. (Privacy Policy)
SovrnThis is an ad network. (Privacy Policy)
Facebook AdsThis is an ad network. (Privacy Policy)
Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
AppNexusThis is an ad network. (Privacy Policy)
OpenxThis is an ad network. (Privacy Policy)
Rubicon ProjectThis is an ad network. (Privacy Policy)
TripleLiftThis is an ad network. (Privacy Policy)
Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
Statistics
Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)