6

我有一个UIActivityViewController允许用户将他们创建的图像分享给几种活动类型之一(facebook、twitter、保存到相机胶卷、打印等)。

由于我希望根据活动(高分辨率打印,Twitter 低分辨率)以不同的质量级别保存/发送图像,因此我使用自定义UIActivityItemProvider(duh)提供图像。

渲染高分辨率版本需要一些时间,所以我想在它做它的时候显示一个活动指示器。实际上,苹果文档提到了这样做。

但我似乎无法弄清楚放置挂钩以显示我的进度指示器的“正确”位置......他们应该去哪里?

更新: 在方法中尝试了以下内容- (id) activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType

[self performSelectorOnMainThread:@selector(startSpinnerWithMessage:) withObject:message waitUntilDone:YES];

self.shareImage = [self.delegate imageForActivityOfType:activityType]; // code that actually generates the image; takes a while.

[self performSelectorOnMainThread:@selector(endSpinner) withObject:nil waitUntilDone:YES];

...不做这项工作。当我点击活动按钮时,UI 会在生成图像时冻结,然后当它完成时,我会看到微调器片刻然后消失。

我认为 endSpinner 调用的定位是有道理的……但是, startSpinner 调用似乎需要转到其他地方。不知道在这里做什么。

4

1 回答 1

4

好吧,原来我只是做错了......

我将我的从代理中获取图像的代码放入协议中的- (id) activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType方法中。UIActivityItemSource原来该方法是在主线程上触发的。

相反,我将相同的代码放在UIActivityItemProvider'- (id) item方法中,它就像一个魅力。

于 2014-08-13T14:55:07.093 回答