首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift段在ImagePickerController的didFinishPickingMediaWithInfo中不起作用

Swift段在ImagePickerController的didFinishPickingMediaWithInfo中不起作用
EN

Stack Overflow用户
提问于 2018-06-08 08:20:03
回答 1查看 107关注 0票数 0

我有这样的代码:

代码语言:javascript
运行
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        //dismiss(animated: true, completion: nil)
        guard info[UIImagePickerControllerMediaType] != nil else { return }
        let mediaType = info[UIImagePickerControllerMediaType] as! CFString
        print("video is",mediaType)
        switch mediaType {
        case kUTTypeImage:
            if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage, let pickedAsset = info[UIImagePickerControllerPHAsset] as? PHAsset {
                self.screenshotOut = pickedImage
                MyVariables.isScreenshot = true
                self.thumbnailImage = pickedImage
                let creationDate = pickedAsset.creationDate
                self.mediaDate = creationDate
                dismiss(animated: true, completion: nil)
                self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)
                }

            }
            break
....
    default:
        dismiss(animated: true, completion: nil)

        print("something else")
        break
    }
}

正如你所看到的,它在等待我的imagePickerController拥有一个照片资产。然后,它设置一些类变量并执行分段。我有这个函数为segue做准备

代码语言:javascript
运行
复制
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
    if segue.identifier == "CreatePost_Segue" {
        guard self.thumbnailImage != nil else {
            return
        }
        if MyVariables.isScreenshot == true {
            guard self.screenshotOut != nil else {
                return
            }
            //self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)
        } else {
            guard self.thumbnailImage != nil else {
                return
            }
            //self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)
            //now I set those three varibles?
        }
        let controller = segue.destination as! CreatePostViewController
        controller.postDate = mediaDate
        controller.thumbnailImage = thumbnailImage
        controller.videoURL = videoURL
        controller.screenshotOut = screenshotOut
        print("segued",controller.postDate)
        print("segued",controller.thumbnailImage)
        print("segued",controller.videoURL)
        print("segued",controller.screenshotOut)
    }
}

它打印:

代码语言:javascript
运行
复制
segued Optional(2016-05-04 17:48:53 +0000)
segued Optional(<UIImage: 0x13d365720> size {2448, 3264} orientation 0 scale 1.000000)
segued nil
segued Optional(<UIImage: 0x13d365720> size {2448, 3264} orientation 0 scale 1.000000)

所以看起来所有的控制器分配都工作了.videoURL是故意设置为空的,而且它是可选的,所以我相信这没问题。

但这种情况永远不会发生。picker控制器被取消了,这很好,但为什么这不是分段?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-08 08:24:17

因为驳回是动画的,所以VC当前正在展示相机/照片库,所以它不能展示另一个库,您可以派送它

代码语言:javascript
运行
复制
dismiss(animated: true, completion: nil)

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5)  {

  self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)

}

用于正确延迟的

代码语言:javascript
运行
复制
self.dismiss(animated: true) {

   self.performSegue(withIdentifier: "CreatePost_Segue", sender: nil)

}

//您可能会在控制台中看到类似VC当前正在演示的消息//

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50751765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档