14

我最近偶然发现了以下有趣的功能:Instagram iPhone Hooks

我想知道是否能够立即通过 documentinteractioncontroller 打开应用程序,而无需显示预览(–presentPreviewAnimated:) 或操作表(–presentOpenInMenuFromRect:inView:animated:)。在我看来,这是唯一的方法,但我可能会遗漏一些东西。

-(void) saveToInstagram {
    NSURL *url;
    UIDocumentInteractionController *dic;
    CGRect rect = CGRectMake(0 ,0 , 0, 0);
    UIImage *i = imageView.image;
    CGRect cropRect = CGRectMake(i.size.width - 306 ,i.size.height - 306 , 612, 612);
    NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Test.ig"];
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageView.image CGImage], cropRect);
    UIImage *img = [[UIImage alloc] initWithCGImage:imageRef];
    CGImageRelease(imageRef);

    [UIImageJPEGRepresentation(img, 1.0) writeToFile:jpgPath atomically:YES];
    url = [[NSURL alloc] initFileURLWithPath:jpgPath];
    dic = [self setupControllerWithURL:url usingDelegate:self];
    [dic presentOpenInMenuFromRect:rect inView:self.view animated:YES];
    [dic retain];
    [img release];
    [url release];
}

- (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {

    UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL];
    interactionController.delegate = interactionDelegate;

    return interactionController;
}

- (void)documentInteractionControllerWillPresentOpenInMenu:(UIDocumentInteractionController *)controller {

}
4

2 回答 2

5

首先使用 .ig 或 .igo 扩展名而不是 .jpg 或 .jpeg 保存您的 JPEG,然后使用 file:// 指令创建一个 NSURL。我还使用了 .igo 扩展名和 UTI com.instagram.exclusivegram 来获得 Instagram 的排他性,但您可以使用 .ig 扩展名和 UTI com.instagram.gram

例如:

// URL TO THE IMAGE FOR THE DOCUMENT INTERACTION
NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]];

docInteractionController.UTI = @"com.instagram.exclusivegram";
[self setupDocumentControllerWithURL:igImageHookFile];

// OPEN THE HOOK
[docInteractionController presentOpenInMenuFromRect:self.frame inView:self animated:YES];
于 2012-03-22T03:17:28.743 回答
2

唯一的方法是如果 Instagram 注册一个自定义 URL 处理程序(例如 igram://),并且可以接受作为该 URL 的一部分(例如 base64 编码)或通过粘贴板的数据。

基本上 UIDocumentInteractionController (和这种技术)解决方法的限制是:

  1. 不允许应用查询或直接启动其他应用。
  2. 应用程序通常无法从其他应用程序的沙盒用户目录中打开文件。
于 2011-07-16T18:02:09.517 回答