【问题标题】:UIImagePickerControllerDelegate to Swift?UIImagePickerControllerDelegate 到 Swift?
【发布时间】:2014-06-03 03:48:55
【问题描述】:
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
    {

        var imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera;
        //imagePicker.mediaTypes = kUTTypeImage
        imagePicker.allowsEditing = false

        self.presentViewController(imagePicker, animated: true, completion: nil)

    }

我似乎无法将 kUTTypeImage 转换为 swift,如果我注释掉相机启动的这一行,但屏幕是黑色的。有任何想法吗?这是客观的 C 语法:

imagePicker.mediaTypes = @[(NSString *) kUTTypeImage];

【问题讨论】:

    标签: ios objective-c uiimagepickercontroller swift


    【解决方案1】:

    显然就是这么简单:

    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
    {
        var imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera;
        imagePicker.mediaTypes = [kUTTypeImage]
        imagePicker.allowsEditing = false
    
        self.presentViewController(imagePicker, animated: true, completion: nil)
    }
    

    【讨论】:

    • 是的,因为如果您查看 Objective-C 语法,mediaTypes 是一个数组。
    • 是的,我在发布问题后意识到这一点。
    • 另外,你可以简化一行——imagePicker.sourceType = .Camera——当你有一个枚举类型的值时,你只需要枚举名称的区别部分。 (还有一个点。)
    • 值得注意的是,kUTTypeImage 是可选的,因此您需要像这样打开它:cameraUI.mediaTypes = [kUTTypeImage!]
    • 您还需要添加此导入:import MobileCoreServices
    【解决方案2】:

    我在XCode6 beta5中测试了这些代码,发现如下错误:

    致命错误:数组元素无法桥接到 Objective-C

    线程 1:EXC_BREAKPOINT(code=EXC_ARM_BREAKPOINT, subcode-0xe7ffdefe)

    原因是我们不能在 XCode6 beta5 中像这样将带有对象的数组分配给 imagePicker.mediaTypes

    imagePicker.mediaTypes = [kUTTypeImage]
    

    我通过init函数用object初始化了数组,现在可以正常使用↓↓↓

    imagePicker.mediaTypes = NSArray(object: kUTTypeImage)
    

    【讨论】:

      【解决方案3】:

      要定义kUTTypeMovie,您可以使用:

      imagePicker.mediaTypes = [String(kUTTypeMovie)]
      

      【讨论】:

        【解决方案4】:

        要同时添加电影和图像,您可以这样做。

        let availableMediaTypes = UIImagePickerController.availableMediaTypesForSourceType(.Camera)
        self.imagePickercontroller.mediaTypes = availableMediaTypes!
        

        您会注意到,当 imagePickercontroller 出现时,您可以导航到视频或捕获图像按钮。之后只需检查委托方法“didFinishPickingMediaWithInfo”中的媒体类型类型

        【讨论】:

          【解决方案5】:

          标记为正确答案的代码在 Swift 4+ 中不再有效,因为已经进行了一些更改。

          UIImagePickerControllerSourceType.Camera 更改为 UIImagePickerController.SourceType.cameraself.presentViewController(...) 更改为 self.present(...)

          这是适用于 Swift 4+ 的相同代码:

          if UIImagePickerController.isSourceTypeAvailable(UIImagePickerController.SourceType.camera)
              {
          
                  let imagePicker = UIImagePickerController()
                  imagePicker.delegate = self
                  imagePicker.sourceType = UIImagePickerController.SourceType.camera;
                  imagePicker.allowsEditing = false
          
                  self.present(imagePicker, animated: true, completion: nil)
          
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-06-11
            • 1970-01-01
            • 2018-09-01
            • 2017-11-29
            • 2011-05-20
            • 2011-07-28
            • 2021-01-27
            • 1970-01-01
            相关资源
            最近更新 更多