视频存储;使用UIImagePickerController;IOS 8 Swift

9

我是一个新手,正在开发应用程序,所以这可能是一个琐碎的问题,但请帮帮我!

我正在尝试使用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

    }
}

这是相机照片库。

@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
    }
}

1
imagePicker.mediaTypes 应该设置为这样 --> imagePicker.mediaTypes = [kUTTypeImage as String , kUTTypeImage as String] - Husam
2个回答

5
您的if语句缺失了匹配的闭合标签。
     if mediaType.isEqualToString(kUTTypeImage as NSString)
         {
             let image = info[UIImagePickerControllerOriginalImage] as UIImage

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

} // <--这里是为图像添加关闭if条件

     else if mediaType.isEqualToString(kUTTypeMovie as NSString)
          {

感谢您的输入,但是没有起作用。它导致了一个陷阱错误。 - Matthew
希望你没有复制/粘贴 ** } ** 这只是为了显示你可以插入 } 的位置。 - ares777
不,我只是关闭了kUTTypeImage的if括号。 - Matthew
如果 mediaType 等于 kUTTypeImage { let image = info[UIImagePickerControllerOriginalImage] as UIImage如果 newMedia 为 true { UIImageWriteToSavedPhotosAlbum(image, self, "image:didFinishSavingWithError:contextInfo:", nil) }} 否则,如果 mediaType 等于 kUTTypeMovie - Matthew
谢谢,这个连同 let url = info[UIImagePickerControllerMediaURL] as NSURL 和 let videoPath = url.relativePath; 一起解决了问题。 - Matthew
如果 (newMedia == true) 是多余的。你应该改成 if newMedia。 - Leo Dabus

0

你可以使用这个保存视频,希望能帮到你 -

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是什么?如何访问它? - imike
您可以在AppleDocumentation中找到有关ALAssetsLibrary的详细信息。这里的“assetLibrary”是一个ALAssetsLibrary实例,它提供了访问受照片应用程序控制的视频和照片的权限。链接在此处 - https://developer.apple.com/documentation/assetslibrary/alassetslibrary - Shawon91

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接