我正在使用UIDocumentInteractionController在Instagram和Whatsapp,Google Drive,Dropbox等其他应用程序中共享图片...(很多人都知道Instagram图片有“.ig”或“.igo”文件扩展名)。如果我在其他应用程序而不是Instagram上共享picture.ig,那么图片就像文件一样,而不是图片。所以我实现了委托方法:
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application {
if (![application isEqualToString:@"com.burbn.instagram"]) {
NSURL *newPath;
NSString *oldPathStr = [controller.URL absoluteString];
NSString *newPathStr = [oldPathStr stringByReplacingOccurrencesOfString:@"ig" withString:@"jpg"];
newPath = [NSURL URLWithString:newPathStr];
controller.URL = newPath;
controller.UTI = @"public.jpeg";
}}
那样如果应用程序不是Instagram,我可以用jpg共享该文件的其他版本(我有.ig和.jpg版本存储在磁盘中)。
但问题是,当我尝试与邮件,消息,Twitter或Facebook等系统应用程序共享图片时,DocumentInteractionController不会调用此委托方法,因此我无法使用jpg URL并且人们收到了他们的iPhone或笔记本电脑中的.ig文件,他们不知道如何打开。如果我尝试打开像Whatsapp这样的其他应用程序,则没有任何问题,并且会调用该委托。
你知道在系统打开邮件编辑器,邮件编辑器或社交作曲家之前我怎么能控制它?
非常感谢你。
答案 0 :(得分:4)
我找到了解决方案。首先,我配置一个UIDocumentInteractionController
- (void)setupDocumentControllerWithURL:(NSURL *)url {
if (self.docInteractionController == nil) {
self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url];
self.docInteractionController.delegate = self;
}
else {
self.docInteractionController.URL = url;
}
}
然后用docInteractionController打开Instagram .ig文件,如果你打开.jpg而不是.ig文件,那么Instagram应用程序就不会出现在" Open In App"菜单
//share the Instagram .ig picture fileURL
[self setupDocumentControllerWithURL:fileURL];
[self.docInteractionController presentOptionsMenuFromRect:self.view.frame inView:self.view animated:YES];
然后你必须更改委托方法中的URL,以允许系统应用程序共享.jpg而不是.ig扩展名的文件(只有Instagram和其他一些应用程序将.ig文件识别为图片
- (void)documentInteractionControllerWillPresentOptionsMenu:(UIDocumentInteractionController *)controller {
NSURL *theUrl = controller.URL;
NSString *theInstagramPath = theUrl.path;
NSString *jpgPath = [theInstagramPath stringByReplacingOccurrencesOfString:@"ig" withString:@"jpg"];
NSURL *jpgURL = [NSURL fileURLWithPath:jpgPath];
controller.URL = jpgURL;
}
在该邮件应用程序之后,消息,Twitter和Facebook(以及非系统应用程序)将以jpg打开该文件。但是如果我们想在Instagram中打开文件,我们必须再次更改网址:
- (void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application {
//Check if the app that is calling is Instagram
if ([application isEqualToString:@"com.burbn.instagram"]) {
NSURL *newPath;
NSString *oldPathStr = [controller.URL absoluteString];
NSString *newPathStr = [oldPathStr stringByReplacingOccurrencesOfString:@"jpg" withString:@"ig"];
newPath = [NSURL URLWithString:newPathStr];
controller.URL = newPath;
}}
这就是全部。如果您在菜单中选择系统应用程序,似乎没有调用willBeginSendingToApplication:。
答案 1 :(得分:0)
您错过了设置UIDocumentInteractionController实例的委托。
创建UIDocumentInteractionController之后执行此操作
YourUIDocumentInteractionControllerObject.delegate = ObjectWhichHaswillBeginSendingToApplicationMethodImplementation;