0

我正在使用objective-c 图像选择器图像选择器来选择时间间隔,但我正在迅速进行。我只能访问objective-c 代码,所以我使用了objective-c 到swift 转换器,但出现了错误。

func qb_imagePickerController(imagePickerController: QBImagePickerController, didFinishPickingAssets assets: [AnyObject]) {
    for asset in assets as! [PHAsset] {
        PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(avAsset: AVAsset, audioMix: AVAudioMix, info: [NSObject : AnyObject]) -> Void in
            var url: NSURL = NSURL(string: "\(asset)")!
            var avAsset: AVURLAsset = AVURLAsset(URL: url, options: nil)
            var playerItem: AVPlayerItem = AVPlayerItem(asset: avAsset)
            var videoPlayer: AVPlayer = AVPlayer(playerItem: playerItem)
            videoPlayer.play()
        })
    }
    self.dismissViewControllerAnimated(true, completion: { _ in })
}

这是我目前拥有的代码。我收到的错误如下。

无法将类型 '(AVAsset, AVAudioMix, [NSObject : AnyObject]) -> Void' 的值转换为预期的参数类型 '(AVAsset?, AVAudioMix?, [NSObject : AnyObject]?) -> Void'

4

2 回答 2

3

查看 The docs for requestAVAssetForVideo:options:resultHandler:the resultHandleryou have doesn't match the required signature。

更改此行:

PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(avAsset: AVAsset, audioMix: AVAudioMix, info: [NSObject : AnyObject]) -> Void in

至:

PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {(avAsset: AVAsset?, audioMix: AVAudioMix?, info: [NSObject : AnyObject]?) -> Void in

注意?在预期的地方添加。

于 2015-12-18T21:31:31.117 回答
0

从 QBImagePickerController 中的 didFinishPickingAssets 从 Swift 4.2 中的 PHAsset 获取视频 URL

let imagePicker = QBImagePickerController()
imagePicker.delegate = self
imagePicker.numberOfColumnsInPortrait = 2
imagePicker.maximumNumberOfSelection = 2
imagePicker.allowsMultipleSelection = true
imagePicker.mediaType = .video

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

func qb_imagePickerController(_ imagePickerController: QBImagePickerController!, didFinishPickingAssets assets: [Any]!) {
     for asset in assets
     {
        PHCachingImageManager().requestAVAsset(forVideo: asset as! PHAsset, options: nil, resultHandler: {(asset, audioMix, info) -> Void in
        if asset != nil {
            let avasset = asset as! AVURLAsset
            let urlVideo = avasset.url
            yourarray.add(urlVideo as URL)
        }

       })

    }


   imagePickerController.dismiss(animated: true) {
       //You can access video urls here
       print("Total Videos:\(yourarray.count)")
   }

}
于 2019-04-24T13:07:17.917 回答