2016-03-31 7 views
7

Можно ли разделить картинку с Instagram в обход листа акций действия?iOS - Отправить изображение в Instagram - DocumentInteraction

Пожалуйста, обратите внимание, что я известно из UIDocumentInteractionController и крючков и на самом деле он работает отлично. С их образцом кода вы получаете опцию Copy to Instagram (либо уникальную, если вы используете эксклюзивный UTI или большой список приложений, которые могут обрабатывать JPG/PNG, наряду с Instagram).

Это прекрасно работает, но я хотел бы знать, есть ли способ выполнить действие «Копировать в Instagram» без необходимости представлять меню UIDocumentInteractionController в iOS 9+.

Для записи это упрощенная версия кода, который отлично работает. Если у вас есть действующий NSURL ...

 guard let data: NSData = NSData(contentsOfURL: url), 
        image = UIImage(data: data) else { 
      return 
     } 

     let imageData = UIImageJPEGRepresentation(image, 100) 
     let captionString = "caption" 
     let writePath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("instagram.ig") 

     guard let _ = imageData?.writeToFile(writePath, atomically: true) else { 
      return 
     } 

     let fileURL = NSURL(fileURLWithPath: writePath) 
     self.documentController = UIDocumentInteractionController(URL: fileURL) 
     self.documentController.delegate = self 
     self.documentController.UTI = "com.instagram.photo" 
     self.documentController.annotation = NSDictionary(object: captionString, forKey: "InstagramCaption") 
     self.documentController.presentOpenInMenuFromRect(viewController.view.frame, inView: viewController.view, animated: true) 

В проблема в том, что это будет представлять собой «Действие листа», и я хочу, чтобы не делать этого, если это возможно, я хочу использовать instagram.ige (или что-то имя это было сделать его эксклюзивным) и пропустить этот ActionSheet.

Возможно ли это?

UPDATE: Я не нашел решение для этого, но, кажется, как Instagram, наконец, добавляет/добавлены расширения:. «Instagram недавно функциональные расширения обмена для своего приложения IOS Теперь вы можете обмениваться фотографиями с третьего сторонние приложения непосредственно в Instagram» источника: http://www.macworld.com/article/3080038/data-center-cloud/new-instagram-feature-for-ios-makes-it-easier-to-share-photos-from-other-apps.html

+0

ли вы найти решение для этого? Кажется, что даже после последнего обновления от Instagram вам по-прежнему нужен пакет акций, прежде чем открывать Instagram, а не делать это напрямую. –

+0

Я этого не сделал, но я также не стал повторять, чтобы быть честным. Я верю (если не ошибаюсь), что клиент не заботился об этом и решил разобраться с Instagram отдельно. Ламе. –

ответ

2
import Photos 
... 

func postImageToInstagram(image: UIImage) { 
     UIImageWriteToSavedPhotosAlbum(image, self, #selector(SocialShare.image(_:didFinishSavingWithError:contextInfo:)), nil) 
} 
func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) { 
     if error != nil { 
      print(error) 
     } 

     let fetchOptions = PHFetchOptions() 
     fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 
     let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) 
     if let lastAsset = fetchResult.firstObject as? PHAsset { 
      let localIdentifier = lastAsset.localIdentifier 
      let u = "instagram://library?LocalIdentifier=" + localIdentifier 
      let url = NSURL(string: u)! 
      if UIApplication.sharedApplication().canOpenURL(url) { 
       UIApplication.sharedApplication().openURL(NSURL(string: u)!) 
      } else { 
       let alertController = UIAlertController(title: "Error", message: "Instagram is not installed", preferredStyle: .Alert) 
       alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 
       self.presentViewController(alertController, animated: true, completion: nil) 
      } 

     } 
} 
+1

Чтобы сделать эту работу, необходимо добавить следующее в PLIST: LSApplicationQueriesSchemes Instagram Thyselius

+1

Есть ли способ сделать это без сохранения в фотоальбом? –