【问题标题】:saving video; using UIImagePickerController; IOS 8 Swift保存视频;使用 UIImagePickerController; IOS 8 斯威夫特
【发布时间】:2015-03-25 13:39:15
【问题描述】:

我是应用程序开发的新手,所以这可能是一个微不足道的问题,但请帮助!!

我正在尝试使用 UIImagePickerController 类将视频保存到相机胶卷。到目前为止,我已经成功地拉起相机并保存了图像。我也可以录制视频,但是当我按下“使用视频”时,它不会保存到相机胶卷中。

下面是附加的 didFinishPickingMediaWithInfo 函数。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject])
{
    let mediaType = info[UIImagePickerControllerMediaType] as NSString

    self.dismissViewControllerAnimated(true, completion: nil)

    if mediaType.isEqualToString(kUTTypeImage as NSString)
    {
        let image = info[UIImagePickerControllerOriginalImage] as UIImage

        if (newMedia == true)
        {
            UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
        }

        else if mediaType.isEqualToString(kUTTypeMovie as NSString)
        {
            let videoPath = info[UIImagePickerControllerMediaURL] as NSString

            if(newMedia == true)
            {
                UISaveVideoAtPathToSavedPhotosAlbum(videoPath, self,
                    "image:didFinishSavingWithError:contextInfo:", nil)
            }
        }
    }
}

这是 useVideo 例程。

@IBAction func useVideo(sender: AnyObject)
{
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
    {

        let imagePicker = UIImagePickerController()

        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
        imagePicker.mediaTypes = [kUTTypeMovie as NSString]
        imagePicker.allowsEditing = false

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

        newMedia = true

    }
}

这里是cameraRoll。

@IBAction func useCameraRoll(sender: AnyObject) {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum){

        let imagePicker = UIImagePickerController()

        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        imagePicker.mediaTypes = [kUTTypeImage as NSString]
        imagePicker.mediaTypes = [kUTTypeMovie as NSString]
        imagePicker.allowsEditing = false

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

        newMedia = false
    }
}

【问题讨论】:

  • imagePicker.mediaTypes 应该这样设置 --> imagePicker.mediaTypes = [kUTTypeImage as String , kUTTypeImage as String]

标签: ios swift uiimagepickercontroller


【解决方案1】:

如果关闭,你已经不匹配了。

     if mediaType.isEqualToString(kUTTypeImage as NSString)
         {
             let image = info[UIImagePickerControllerOriginalImage] as UIImage

             if (newMedia == true)
             {
                 UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil)
             }

} //

     else if mediaType.isEqualToString(kUTTypeMovie as NSString)
          {

【讨论】:

  • 感谢您的输入,但没有奏效。它导致了一个陷阱错误。
  • 希望你没有复制/粘贴 ** } ** 这只是为了显示你可以插入的位置 }
  • 不,我只是关闭了 kUTTypeImage 的 if 括号。
  • if mediaType.isEqualToString(kUTTypeImage as NSString) { let image = info[UIImagePickerControllerOriginalImage] as UIImage if (newMedia == true) { UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil) } } else if mediaType.isEqualToString(kUTTypeMovie as NSString)
  • 谢谢,这连同 let url = info[UIImagePickerControllerMediaURL] as NSURL let videoPath = url.relativePath ;修复了问题
【解决方案2】:

你可以用这个来保存视频,希望对你有帮助 -

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
    let mediaType = info[UIImagePickerControllerMediaType] as! NSString

    if mediaType.isEqual(to: kUTTypeMovie as NSString as String)
    {
        // Is Video
        let url: URL = info[UIImagePickerControllerMediaURL] as! URL

        assetsLibrary.writeVideoAtPath(toSavedPhotosAlbum: url, completionBlock: {
            (nsurl, error) -> Void in
            if let theError = error{
                print("Error saving video = \(theError)")
                self.dismiss(animated: true, completion: nil)
            }
            else {
                print("no errors happened")
            }
        })
    }
}

【讨论】:

  • 这里的assetsLibrary 是什么?如何到达?
  • 您将在 AppleDocumentation 中找到有关 ALAssetsLibrary 的详细信息。这里的“assetLibrary”是 ALAssetsLibrary 的一个实例,它提供对照片应用程序控制下的视频和照片的访问。链接在这里 - developer.apple.com/documentation/assetslibrary/alassetslibrary
猜你喜欢
  • 2016-11-23
  • 1970-01-01
  • 2017-05-23
  • 2023-03-17
  • 1970-01-01
  • 2017-07-22
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多