【问题标题】:Why do larger images not appear in a share extension, or action extension?为什么更大的图像不会出现在共享扩展或操作扩展中?
【发布时间】:2015-09-08 11:34:19
【问题描述】:

当我尝试创建共享扩展(或操作扩展)时 写包含共享图片的邮件,为什么大图没有出现,只有小图?

【问题讨论】:

    标签: ios image action share


    【解决方案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),如果没有这种检查肯定会崩溃照片。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多