how to capture camera with UIImagePickerController in swift?
Solution 1
You should also import MobileCoreServices in the controller:
import MobileCoreServices
and then put the type inside square brackets like this:
image.mediaTypes = [kUTTypeImage]
Swift 2.0 and Higher
image.mediaTypes = [kUTTypeImage as String]
Solution 2
Swift 2.0
In Swift 2.0 (Xcode 7), you need to explicitly cast kUTTypeImage
(a CFString
) to String
:
picker.mediaTypes = [kUTTypeImage as String]
And you still need to import Mobile Core Services for this symbol to be defined:
import MobileCoreServices
That said, the default value of mediaTypes
is [kUTTypeImage]
anyway, so you don't need to set it if that's what you want.
Solution 3
also you should add UINavigationControllerDelegate
to the protocols list of the ViewController
and one of the optional delegate functions (if you a planing to get a picture)
This is the working code for your issue:
import UIKit
import MobileCoreServices
class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!){
println("i've got an image");
}
@IBAction func capture(sender : UIButton) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera){
println("Button capture")
var imag = UIImagePickerController()
imag.delegate = self
imag.sourceType = UIImagePickerControllerSourceType.Camera;
imag.mediaTypes = [kUTTypeImage]
imag.allowsEditing = false
self.presentViewController(imag, animated: true, completion: nil)
}
}
}
Solution 4
From Your Piece of code its very clear that you are making mistakes at two place one is setting delegate
and second is setting Media type imag.mediaTypes = kUTTypeImage
First One:If you look into the delegate
definition of UIImagePickerController
it requires to confirm two protocol UINavigationControllerDelegate
and UIImagePickerControllerDelegate
so you have to adopt these two protocols in your viewcontroller
class like as
class ViewController: UIViewController,UINavigationControllerDelegate, UIImagePickerControllerDelegate
second error:If you look into the definition part of mediaTypes
it clearly requires array of media types to passed so do like this
imag.mediaTypes = [kUTTypeImage]
Apart from this, I have written a very descent class for the same task
It is easy to understand and integrate.
//Declare property
var imagePicker:ImageVideoPicker?
//Call below line of code properly, it will return an image
self.imagePicker = ImageVideoPicker(frame: self.view.frame, superVC: self) { (capturedImage) -> Void in
if let captureImage = capturedImage{
//you did it.....
}
}
Solution 5
Try this
import UIKit
import AVFoundation
class ViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
var imagePicker: UIImagePickerController!
@IBOutlet weak var ImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func takeImage(sender: AnyObject) {
imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .Camera
presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
imagePicker.dismissViewControllerAnimated(true, completion: nil)
ImageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
}
}
user3745888
Updated on December 05, 2020Comments
-
user3745888 over 3 years
I'm trying use
UIImagePickerController
in swift but isn't work...my ViewController:
class ViewController: UIViewController { @IBOutlet var imag : UIView = nil @IBAction func capture(sender : UIButton) { println("Button capture") if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) { var imag = UIImagePickerController() imag.delegate = self imag.sourceType = UIImagePickerControllerSourceType.Camera; imag.mediaTypes = kUTTypeImage imag.allowsEditing = false self.presentViewController(imag, animated: true, completion: nil) } } }
I have errors in following line of code
imag.delegate = self (Type'ViewControlles does confoorm to protocol 'UIImagePickerControllerDelegate') imagePicker.mediaTypes = kUTTypeImage (use of unresolved identifier kUTTypeImage)
I have read that
kUTTypeImage
cant use in swift.but don't know, i am using bad this functions. Any help?Thanks!!
-
user3745888 almost 10 yearsbut nnot in line imag.mediaTypes = [kUTTypeImage as String], exist kUTTypeImage in Swift?? or there are other form to use camera?
-
Narwhal almost 10 yearsRoman, can you please confirm this works for you with Beta3? I'm having trouble with the kUTTypeImage reference. thx
-
Bagusflyer almost 10 yearsThe delegate is different in beta 3 now. How to get UIImage in beta 3?
-
elprl almost 10 yearsThis is what I did: if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { }
-
ohyes almost 10 yearsIn Beta5, imag.mediaTypes=[kUTTypeImage] would cause error. Change it to imagePicker.mediaTypes = NSArray(object: kUTTypeImage), and it works fine.
-
Kamar Shad over 9 yearsPlease can you give reason before down casting my answer.Please i would be very glad to know
-
Kamar Shad over 9 yearsI don't know why people are in so Hurry even they don't try to think,we are here to help each other.I request you all whenever you gonna make any down voting, Please do mention the reason in a comment.It will help me and others too
-
Apfelsaft over 9 yearsYou can find a modified version of this code which works in Beta 6 here: pastebin.com/5RxLDw0f
-
Salman Hasrat Khan over 9 years@ohyes you're right. Even in the Xcode 6.0.1 you need to type mediaTypes = NSArray(object: kUTTypeImage). Setting it as a normal swift array causes a crash.
-
Sébastien Stormacq over 9 yearsThank you ! I just spent an hour trying to understand that "unresolved reference" compilation error ... !!
-
ephemer over 9 yearsI think you should make it clearer that ImageVideoPicker is your own class. I didn't downvote you but I did waste time checking to see if ImageVideoPicker was a new swift-only class or something.
-
ephemer over 9 yearsThanks, I couldn't get this working using a bridging header with
#import <MobileCoreServices/UTCoreTypes.h>
(to anyone else reading this: DON'T bother trying that) -
ephemer over 9 yearsYou asked for an explanation and now you're belittling me for providing one. Classy.
-
Adrian over 9 yearsYou also have to add MobileCoreServices to Link Binaries with Libraries
-
Crashalot about 8 yearsIsn't explicitly allowing only images a good practice in case the default value changes in the future?
-
Matthew Cawley over 6 yearsNote that kUTTypeImage is a CFString and mediaTypes is expect a string. For this you will want
imag.mediaTypes = [kUTTypeImage as String]