The code is perfectly working in iOS 10 and below. But, in iOS 11 after cancel the photo library and open the camera its always opens the photo library. This is only happening in iOS 11.
Code is compiled in Xcode 9 Beta 4.
Code below:
@IBAction func buttonProfilePicPressed(_ sender: UIButton)
{
let alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet)
alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: { _ in
self.openCamera()
}))
alert.addAction(UIAlertAction(title: "Gallery", style: .default, handler: { _ in
self.openGallary()
}))
alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel, handler: nil))
self.present(alert, animated: true, completion: nil)
imgPicker.delegate = self
self.present(imgPicker, animated: true, completion: nil)
}
func openCamera()
{
if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.camera))
{
imgPicker.sourceType = UIImagePickerControllerSourceType.camera
imgPicker.allowsEditing = true
self.present(imgPicker, animated: true, completion: nil)
}
else
{
let alert = UIAlertController(title: "Warning", message: "You don't have camera", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
self.present(alert, animated: true, completion: nil)
}
}
func openGallary()
{
imgPicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
imgPicker.allowsEditing = true
self.present(imgPicker, animated: true, completion: nil)
}
func startCameraFromViewController(_ viewController: UIViewController, withDelegate delegate:
UIImagePickerControllerDelegate & UINavigationControllerDelegate) -> Void {
if (UIImagePickerController.isSourceTypeAvailable(.camera) == false) {
print("fail")
}
let cameraController = UIImagePickerController()
cameraController.sourceType = .camera
cameraController.allowsEditing = true
cameraController.delegate = delegate
present(cameraController, animated: true, completion: nil)
}
This is the code that works for me. Same problem on iOS 11, but working with this. Maybe you need to remove self.present(imgPicker, animated: true, completion: nil)
in buttonProfilePicPressed
method.