如何使用UIImagePickerController呈现ViewController

时间:2016-08-25 13:18:10

标签: ios swift optimization uiviewcontroller uiimagepickercontroller

我正在尝试展示ImagePicker,并在用户选择了图像后,在其中显示图像编辑ViewController,用户可以在其中操作图像,然后将编辑后的图像发送回原始ViewController

  

问题:

     

是否有标准或最佳实践方法从初始ViewControlle开始,然后在另一个ViewController之后呈现ImagePicker进行成像编辑,然后将其全部显示在初始ViewController中,同时进行转换    看起来无缝?

     

下面的尝试3中的建议是一个好的练习方法还是有更好的例子来说明如何实现?

尝试1。

我最初的想法是通过以下代码以编程方式显示ImagePicker,然后在选择图像后进行图像编辑ViewController。但这种方法似乎并不正确。在挑选图像后,我似乎无法使ImagePicker正确地转移到ViewController。 (一堆“意外发现nil,同时展开可选值”错误,显示编辑ViewController。“

    let imagePicker = MyImagePickerController()
    imagePicker.delegate = self
    imagePicker.sourceType = .PhotoLibrary
    imagePicker.allowsEditing = false
    imagePicker.modalTransitionStyle = UIModalTransitionStyle.CoverVertical
    self.presentViewController(imagePicker, animated: true, completion: nil)

尝试2。

我的第二次尝试是将图像编辑ViewController显示为隐藏/透明,然后立即加载ImagePicker,但这会导致一些空白背景闪烁。

尝试3。

所以我遇到了这个建议,这是我第二次尝试的变体,使用窗口背景显示当前ViewController的图像,这似乎是可能的。 http://xissburg.com/presenting-multiple-modal-view-controllers-at-once/

尝试4。

我的另一个想法是创建一个单独的ViewController来处理ImagePicker,然后通过接口构建器中的segue连接每个ViewController

1 个答案:

答案 0 :(得分:2)

您是否尝试过这样做,首先ViewControllerviewDidLoad上显示选择器而没有呈现动画。

let imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .PhotoLibrary
imagePicker.allowsEditing = false
imagePicker.modalTransitionStyle = UIModalTransitionStyle.CoverVertical
self.presentViewController(imagePicker, animated: false, completion: nil)

现在开始

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {

    }
    dismissViewControllerAnimated(true, completion: {
        //Present your custom editing controller also create `protocol/delegate` for getting editing image back.
    })
}