Swift 2 - 使用UIActivityViewController共享视​​频

SNo*_*Nos 6 social xcode facebook uiactivityviewcontroller swift2

我正在尝试使用网址分享视频UIActivityViewController.如果我尝试使用Image,我没有问题.

分享图片作品:

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)
Run Code Online (Sandbox Code Playgroud)

分享视频无效.为什么?

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)
Run Code Online (Sandbox Code Playgroud)

SNo*_*Nos 18

这就是你怎么做的....

  let urlData = NSData(contentsOfURL: NSURL(string:"https://example.com/video.mov)")!)

            if ((urlData) != nil){

                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)
            }
Run Code Online (Sandbox Code Playgroud)

  • 什么是'activityVC.setValue("Video",forKey:"subject")`的目的? (3认同)

小智 8

请记住,视频通常是一个大文件,因此下载和保存它需要一些时间。在这里,我使用了第一个答案的一部分,但添加了一些 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)
    }
}
Run Code Online (Sandbox Code Playgroud)