为什么较大的图片不会出现在共享扩展程序或操作扩展程序中?

时间:2015-09-08 11:34:19

标签: ios image action share

当我尝试创建共享扩展程序(或操作扩展程序)时  要编写包含共享图像的电子邮件,为什么不显示较大的图像,只显示较小的图像?

1 个答案:

答案 0 :(得分:1)

由于在向您的分机提供图像数据之前可能会有延迟,因此您必须等到它到达之后才能显示包含它们的电子邮件撰写窗口。 (否则他们不会出现)

我在bitsToLoad中保留一个计数器,我为我请求的每个数据递增,并为我收到的每个数据递减

if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeImage]) {
                        bitsToLoad ++;
                        __weak MFMailComposeViewController *pick = picker;
                        [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeImage options:nil completionHandler:^(UIImage *image, NSError *error) {
                            if (image) {
                                [pick addAttachmentData:UIImageJPEGRepresentation(image,0.8) mimeType:@"image/jpeg" fileName:@"image.jpg"];  
                            }
                            [self dataFetched];
                        }];

在我出示电子邮件表格之前,检查一下是否已全部到达。

-(void) dataFetched {
    bitsToLoad--;
    if (bitsToLoad==0) {
        [self presentViewController:picker animated:YES completion:^(){ }];
    }
}

但这还不够。

为了确保在考虑所有附件后才显示电子邮件界面,并且即使没有图像也会在最后显示电子邮件界面,我在扫描例程开始时将bitsToLoad设置为1 ...

NSInteger bitsToLoad=1 

并在最后减少并检查它。

[self dataFetched];

现在只有在检查完所有附件后才会显示视图控制器,并且已提取所有数据。

请注意,您可能会发现即使没有这种检查也会出现小图像(例如屏幕抓取),因为它们足够快地传递到扩展程序,但对于较大的图像(例如典型的iPhone),它肯定会破坏照片。