使用类似于SLComposeViewController的Swift将UIImage发布到Instagram
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用类似于SLComposeViewController的Swift将UIImage发布到Instagram相关的知识,希望对你有一定的参考价值。
我正在开发一个ios Xcode 7 Swift 2项目。该应用程序使用以下方法将照片发布到Facebook
和Twitter
:
var shareToFacebook: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
和
var shareToTwitter: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeTwitter)
喜欢将照片发布到这两个社交媒体是多么容易和简单。我不需要或想要它们的API。
我想为Instagram
做类似和简单的事情。在不必处理Instagram API
的情况下,最好的方法是什么?或者我别无选择?
我的照片data
使用NSCoding
保存,而不是在DocumentDirectory
。我看了here进行集成,但这是为了保存在应用程序directory
中的照片。
就像我已经拥有的Facebook和Twitter一样简单。
答案
针对Swift 3进行了更新
import UIKit
import Foundation
class InstagramManager: NSObject, UIDocumentInteractionControllerDelegate {
private let kInstagramURL = "instagram://app"
private let kUTI = "com.instagram.exclusivegram"
private let kfileNameExtension = "instagram.igo"
private let kAlertViewTitle = "Error"
private let kAlertViewMessage = "Please install the Instagram application"
var documentInteractionController = UIDocumentInteractionController()
// singleton manager
class var sharedManager: InstagramManager {
struct Singleton {
static let instance = InstagramManager()
}
return Singleton.instance
}
func postImageToInstagramWithCaption(imageInstagram: UIImage, instagramCaption: String, view: UIView) {
// called to post image with caption to the instagram application
let instagramURL = NSURL(string: kInstagramURL)
if UIApplication.shared.canOpenURL(instagramURL! as URL) {
let jpgPath = (NSTemporaryDirectory() as NSString).appendingPathComponent(kfileNameExtension)
do {
try UIImageJPEGRepresentation(imageInstagram, 1.0)?.write(to: URL(fileURLWithPath: jpgPath), options: .atomic)
} catch {
print(error)
}
let rect = CGRect(x: 0, y: 0, width: 612, height: 612)
let fileURL = NSURL.fileURL(withPath: jpgPath)
documentInteractionController.url = fileURL
documentInteractionController.delegate = self
documentInteractionController.uti = kUTI
// adding caption for the image
documentInteractionController.annotation = ["InstagramCaption": instagramCaption]
documentInteractionController.presentOpenInMenu(from: rect, in: view, animated: true)
} else {
/// display some message about how it didn't work
/// Like: UIAlertController(title: kAlertViewTitle, message: kAlertViewMessage, preferredStyle: .alert)
}
}
}
然后在ViewController中你要调用它...
InstagramManager.sharedManager.postImageToInstagramWithCaption(imageInstagram: <YOUR IMAGE>, instagramCaption: shareText, view: self.view)
如果安装了Instagram,这将打开“开放”功能
另一答案
我看了here并找到了解决方案:
我创建了一个NSObject
:
import UIKit
import Foundation
class InstagramManager: NSObject, UIDocumentInteractionControllerDelegate {
private let kInstagramURL = "instagram://app"
private let kUTI = "com.instagram.exclusivegram"
private let kfileNameExtension = "instagram.igo"
private let kAlertViewTitle = "Error"
private let kAlertViewMessage = "Please install the Instagram application"
var documentInteractionController = UIDocumentInteractionController()
// singleton manager
class var sharedManager: InstagramManager {
struct Singleton {
static let instance = InstagramManager()
}
return Singleton.instance
}
func postImageToInstagramWithCaption(imageInstagram: UIImage, instagramCaption: String, view: UIView) {
// called to post image with caption to the instagram application
let instagramURL = NSURL(string: kInstagramURL)
if UIApplication.sharedApplication().canOpenURL(instagramURL!) {
let jpgPath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent(kfileNameExtension)
UIImageJPEGRepresentation(imageInstagram, 1.0)!.writeToFile(jpgPath, atomically: true)
let rect = CGRectMake(0,0,612,612)
let fileURL = NSURL.fileURLWithPath(jpgPath)
documentInteractionController.URL = fileURL
documentInteractionController.delegate = self
documentInteractionController.UTI = kUTI
// adding caption for the image
documentInteractionController.annotation = ["InstagramCaption": instagramCaption]
documentInteractionController.presentOpenInMenuFromRect(rect, inView: view, animated: true)
} else {
// alert displayed when the instagram application is not available in the device
UIAlertView(title: kAlertViewTitle, message: kAlertViewMessage, delegate:nil, cancelButtonTitle:"Ok").show()
}
}
}
然后在我使用的@IBAction
中:
let image = self.photoImageView.image
InstagramManager.sharedManager.postImageToInstagramWithCaption(image!, instagramCaption: "(self.description)", view: self.view)
这将打开一个带有“open-in”风格的菜单,用户可以在Instagram
中打开应用程序(如果已安装)。
另一答案
这是一个可重复使用的快速4+类。使用Xcode 10.1。
- 制作swift空文件。
- 将以下代码复制并粘贴到文件中。
import UIKit import Foundation class InstagramHelper: NSObject, UIDocumentInteractionControllerDelegate { private let kInstagramURL = "instagram://den3079" private let kUTI = "com.instagram.exclusivegram" private let kfileNameExtension = "instagram.igo" private let kAlertViewTitle = "Error" private let kAlertViewMessage = "Please install the Instagram application" var documentInteractionController = UIDocumentInteractionController() // singleton manager class var sharedManager: InstagramHelper { struct Singleton { static let instance = InstagramHelper() } return Singleton.instance } func postImageToInstagramWithCaption(imageInstagram: UIImage, instagramCaption: String, controller: UIViewController) { // called to post image with caption to the instagram application let instagramURL = URL(string: kInstagramURL) DispatchQueue.main.async { if UIApplication.shared.canOpenURL(instagramURL!) { let jpgPath = (NSTemporaryDirectory() as NSString).appendingPathComponent(self.kfileNameExtension) if let jpegData = UIImageJPEGRepresentation(imageInstagram, 1.0) { do { try jpegData.write(to: URL(fileURLWithPath: jpgPath), options: .atomicWrite) } catch { print("write image failed") } }else { let jpegData = UIImagePNGRepresentation(imageInstagram) do { try jpegData?.write(to: URL(fileURLWithPath: jpgPath), options: .atomicWrite) } catch { print("write image failed") } } let fileURL = NSURL.fileURL(withPath: jpgPath) self.documentInteractionController.url = fileURL self.documentInteractionController.delegate = self self.documentInteractionController.uti = self.kUTI // adding caption for the image self.documentInteractionController.annotation = ["InstagramCaption": instagramCaption] self.documentInteractionController.presentOpenInMenu(from: controller.view.frame, in: controller.view, animated: true) } else { // alert displayed when the instagram application is not available in the device self.showAlert("", message: self.kAlertViewMessage, controller: controller) } } } func showAlert(_ title: String, message: String, controller : UIViewController){ let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert) let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { action -> Void in //Just dismiss the action sheet let selector: Selector = NSSelectorFromString("alertO
以上是关于使用类似于SLComposeViewController的Swift将UIImage发布到Instagram的主要内容,如果未能解决你的问题,请参考以下文章
使用类似于 QueryTable 的东西导入 excel 文件?