通过 UIActivityController 共享视频 PHAsset
Sharing Video PHAsset via UIActivityController
我正在尝试使用 requestAVAsset 通过 UIActivityController 分享视频 PHAsset。这适用于 Messaging,但不适用于 AirDrop,表示为 'Failed'.
PHCachingImageManager.default().requestAVAsset(forVideo: asset, options: nil, resultHandler:
{ (givenAsset, audioMix, info) in
let videoAsset = givenAsset as! AVURLAsset
let videoURL = videoAsset.url
DispatchQueue.main.async {
let activityViewController = UIActivityViewController(
activityItems: [videoURL],
applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivityType.saveToCameraRoll]
if let popoverPresentationController = activityViewController.popoverPresentationController {
popoverPresentationController.barButtonItem = (sender)
}
self.present(activityViewController, animated: true, completion: nil)
}
})
这似乎正确地设置了 UIActivityController 并且只适用于某些活动:
- 消息 - ✔️有效,正确导出视频。
- AirDrop - ✖️Shows "Failed"
- Dropbox - ✖️提供正确的 Dropbox 视图,但显示 "Unknown error occurred"
我在使用 PHAsset 时 运行 遇到了类似的奇怪行为。我猜这是一个(故意)未记录的 security/sandboxing 限制。
我可以通过将底层文件复制到用户目录,然后对复制的文件执行操作来解决这个问题。
我是循环执行的。有时,复制会因模糊的文件权限错误而失败。当它出现时,我会在几秒钟后重试(使用 DispatchQueue.main.asyncAfter
)。最终,它成功了!
我正在尝试使用 requestAVAsset 通过 UIActivityController 分享视频 PHAsset。这适用于 Messaging,但不适用于 AirDrop,表示为 'Failed'.
PHCachingImageManager.default().requestAVAsset(forVideo: asset, options: nil, resultHandler:
{ (givenAsset, audioMix, info) in
let videoAsset = givenAsset as! AVURLAsset
let videoURL = videoAsset.url
DispatchQueue.main.async {
let activityViewController = UIActivityViewController(
activityItems: [videoURL],
applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivityType.saveToCameraRoll]
if let popoverPresentationController = activityViewController.popoverPresentationController {
popoverPresentationController.barButtonItem = (sender)
}
self.present(activityViewController, animated: true, completion: nil)
}
})
这似乎正确地设置了 UIActivityController 并且只适用于某些活动:
- 消息 - ✔️有效,正确导出视频。
- AirDrop - ✖️Shows "Failed"
- Dropbox - ✖️提供正确的 Dropbox 视图,但显示 "Unknown error occurred"
我在使用 PHAsset 时 运行 遇到了类似的奇怪行为。我猜这是一个(故意)未记录的 security/sandboxing 限制。
我可以通过将底层文件复制到用户目录,然后对复制的文件执行操作来解决这个问题。
我是循环执行的。有时,复制会因模糊的文件权限错误而失败。当它出现时,我会在几秒钟后重试(使用 DispatchQueue.main.asyncAfter
)。最终,它成功了!