Предупреждение не отображается в ImagePicker - PullRequest
0 голосов
/ 16 июня 2020

Я хочу предложить возможность использовать либо библиотеку фотографий, либо камеру, но мое предупреждение о выборе фотографий или использования камеры не отображается, когда я добавляю текущую таблицу действий. Скомпилированное приложение переходит прямо в фотоальбом, не давая мне возможности выбрать камеру или библиотеку фотографий.

Это журнал из моего Xcode 11:

2020-06-15 23 : 05: 22.931477-0400 MeMe [6298: 3505455] Попытка представить, на котором ожидается отложенное представление для завершения 2020-06-15 23: 05: 22.931653-0400 MeMe [6298: 3505455] Попытка представить, на котором ожидание отложенного представления для завершения ошибки в connection_block_invoke_2: соединение прервано

Это мой код:

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate,
UINavigationControllerDelegate {

    // OUTLETS *******************************************

    // Image
    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    // ACTIONS *******************************************    

    // Button
    @IBAction func pickImage(_ sender: Any) {

        let imagePickerController = UIImagePickerController()
        // set imagePickerController as delegate
        imagePickerController.delegate = self

        // provide actionSheet to display the camera and photo  options
        let actionSheet = UIAlertController(title: "Source", message: "Take a picture or select a photo", preferredStyle: .actionSheet)

        // add camera action to imagePickerController
        actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler:{(action:UIAlertAction) in

            // check if the camera is available
            if UIImagePickerController.isSourceTypeAvailable(.camera) {
                imagePickerController.sourceType = .camera
            }
            else {
                print("Camera not available")
            }

        }))

        self.present(imagePickerController, animated: true, completion: nil)

        // add photos action to imagePickerController
        actionSheet.addAction(UIAlertAction(title: "Photos", style: .default, handler:{(action:UIAlertAction) in imagePickerController.sourceType = .photoLibrary}))

        self.present(imagePickerController, animated: true, completion: nil)

        // cancel
        actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

        self.present(actionSheet, animated: true, completion: nil)
    }

    // assign image to imageView

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

        let image = info[UIImagePickerController.InfoKey.originalImage] as! UIImage

        imageView.image = image

        picker.dismiss(animated: true, completion: nil)

    }

    // dismiss the image selector

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {

        picker.dismiss(animated: true, completion: nil)

    }


    }



Ответы [ 2 ]

0 голосов
/ 16 июня 2020
@IBAction func pickImage(_ sender: Any) {

let imagePickerController = UIImagePickerController()
imagePickerController.delegate = self


let actionSheet = UIAlertController(title: "Source", message: "Take a picture or select a photo", preferredStyle: .actionSheet)


actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler:{(action:UIAlertAction) in


    if UIImagePickerController.isSourceTypeAvailable(.camera) {
        imagePickerController.sourceType = .camera
      self.present(imagePickerController, animated: true, completion: nil)
    }  else {
        print("Camera not available")
    }

}))




actionSheet.addAction(UIAlertAction(title: "Photos", style: .default, handler:{(action:UIAlertAction) in   

imagePickerController.sourceType = .photoLibrary
self.present(imagePickerController, animated: true, completion: nil)
 }))

// cancel
actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

self.present(actionSheet, animated: true, completion: nil)

}

0 голосов
/ 16 июня 2020

Вы пытаетесь представить actionSheet после представления imagePickerController, что невозможно. Вам необходимо представить imagePickerController в блоке обработчика UIAlertAction. Вот код:

@IBAction func pickImage(_ sender: Any) {

    let imagePickerController = UIImagePickerController()
    // set imagePickerController as delegate
    imagePickerController.delegate = self

    // provide actionSheet to display the camera and photo  options
    let actionSheet = UIAlertController(title: "Source", message: "Take a picture or select a photo", preferredStyle: .actionSheet)

    // add camera action to imagePickerController
    actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler:{(action:UIAlertAction) in

        // check if the camera is available
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            imagePickerController.sourceType = .camera
        }
        else {
            print("Camera not available")
        }

        self.present(imagePickerController, animated: true, completion: nil)
    }))


    // add photos action to imagePickerController
    actionSheet.addAction(UIAlertAction(title: "Photos", style: .default, handler:{(action:UIAlertAction) in
        imagePickerController.sourceType = .photoLibrary
        self.present(imagePickerController, animated: true, completion: nil)
    }))


    // cancel
    actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

    self.present(actionSheet, animated: true, completion: nil)
}
...