【问题标题】:Swift 2 - Share video with UIActivityViewControllerSwift 2 - 使用 UIActivityViewController 分享视频
【发布时间】:2015-11-09 21:30:31
【问题描述】:

我正在尝试从使用 UIActivityViewController 的 URL 共享视频。
如果我尝试使用图像,我没有问题。

分享图片作品:

let imageThump = NSURL(string: "https://example.com/image.png")
let imageData = NSData(contentsOfURL: imageThump!) 
let objectsToShare = [comment!, imageData!]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

共享视频不起作用。为什么?

let videoShare = NSURL(string: "https://example.com/video.mp4")
let videoData = NSData(contentsOfURL: videoShare!) 
let objectsToShare = [comment!, videoData!]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

【问题讨论】:

  • 我会添加更多细节。究竟是什么不工作?您可以提供任何错误消息、堆栈跟踪等吗?

标签: xcode video swift2 share uiactivityviewcontroller


【解决方案1】:

这就是你的做法......

guard let urlData = NSData(contentsOfURL: NSURL(string:"https://example.com/video.mov)")!) else { 
    return 
}

print(urlData)


let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
let docDirectory = paths[0]
let filePath = "\(docDirectory)/tmpVideo.mov"
urlData?.writeToFile(filePath, atomically: true)
// File Saved

let videoLink = NSURL(fileURLWithPath: filePath)


let objectsToShare = [videoLink] //comment!, imageData!, myWebsite!]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

activityVC.setValue("Video", forKey: "subject")


// New Excluded Activities Code
if #available(iOS 9.0, *) {
    activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypeOpenInIBooks, UIActivityTypePostToTencentWeibo, UIActivityTypePostToVimeo, UIActivityTypePostToWeibo, UIActivityTypePrint]
} else {
    // Fallback on earlier versions
    activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypeMail, UIActivityTypeMessage, UIActivityTypePostToTencentWeibo, UIActivityTypePostToVimeo, UIActivityTypePostToWeibo, UIActivityTypePrint ]
}

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

【讨论】:

  • 为什么这会冻结应用程序几秒钟?
  • 因为正在下载需要分享的视频
  • 有没有办法让它看起来更平滑,而不是看起来滞后
  • 我所做的是添加一个显示设备正在加载的活动指示器
  • activityVC.setValue("Video", forKey: "subject") 的目的是什么?
【解决方案2】:

请记住,视频通常是一个大文件,因此需要一些时间才能下载和保存。在这里,我使用了第一个答案的一部分,但添加了一些 GCD。你会得到更好的结果。

我这样做是为了避免应用在下载和保存视频之前一直冻结:

let url = NSURL(string: "https://example.com/video.mov")
    
//Show activity indicator
    
DispatchQueue.global(qos: .background).async {
    guard let urlData = NSData(contentsOf: url) else { return }
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let filePath="\(documentsPath)/tempFile.mov"
    DispatchQueue.main.async {
        urlData.write(toFile: filePath, atomically: true)
                                        
        //Hide activity indicator
    
        let activityVC = UIActivityViewController(activityItems: [NSURL(fileURLWithPath: filePath)], applicationActivities: nil)
        activityVC.excludedActivityTypes = [.addToReadingList, .assignToContact]
        self.present(activityVC, animated: true, completion: nil)
    }
}

【讨论】:

    【解决方案3】:

    它不起作用,因为此类不允许将 NSData 传递给 Facebook 活动类型。

    "UIActivityTypePostToFacebook 该对象将提供的内容发布到 Facebook 用户的墙上。

    使用此服务时,您可以提供 NSString、NSAttributedString、UIImage、ALAsset 和 NSURL 对象作为活动项的数据。您还可以指定其内容使用 assets-library 方案的 NSURL 对象。"

    https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIActivity_Class/index.html#//apple_ref/doc/constant_group/Built_in_Activity_Types

    我也一直在努力让它发挥作用。还没弄清楚如何让它工作;但是,这就是您的代码无法正常工作的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      相关资源
      最近更新 更多