2015-11-09 5 views
4

Я пытаюсь поделиться видео с URL-адресом, используя UIActivityViewController. Если я попробую с изображением, у меня проблем нет.Swift 2 - поделиться видео с помощью UIActivityViewController

Share Image Works:

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) 

Share Видео не работает. Зачем?

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) 
+0

Я хотел бы добавить больше деталей. Что именно не работает? Есть ли сообщения об ошибках, трассировки стека и т. Д., Которые вы могли бы предоставить? –

ответ

10

ЭТО КАК СДЕЛАТЬ ЭТО ....

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) 
      } 
+0

Почему это зависает приложение для пары секунд? – ak2g

+0

Поскольку вы загружаете видео, которое необходимо обмениваться – SNos

+0

, все равно, чтобы сделать его более гладким, а не выглядящим laggy. – ak2g

1

Это не работает, потому что этот класс не позволяет передавать NSData в тип активности Facebook.

«UIActivityTypePostToFacebook Столбики объект предоставленный контент стене пользователя на Facebook.

При использовании этой услуги, вы можете предоставить NSString, NSAttributedString, UIImage, ALAsset и объекты NSURL в качестве данных для деятельности Вы также можете указать объекты NSURL, содержимое которых использует схему библиотеки активов. "

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

Я пытался получить эту работу, а также. Не выяснили, как заставить его работать; однако, поэтому ваш код не работает.

2

Помните, что видео, как правило, большой файл, так что это займет некоторое время для того, чтобы быть загружены и сохранены. Здесь я использовал часть первого ответа, но добавил некоторые GCD. Вы получите лучшие результаты.

Это, как я сделал это, чтобы избежать приложение, чтобы оставаться замороженными до видео не загружается и сохраняется:

let url = NSURL(string:"https://example.com/video.mov)" 

    //Show activity indicator 

    DispatchQueue.global(qos: .background).async { 
     if let urlData = NSData(contentsOf: url){ 
      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) 
       } 
      } 
     } 

 Смежные вопросы

  • Нет связанных вопросов^_^