在UIActivityItemProvider活动期间显示进度指示器

时间:2014-08-13 04:25:35

标签: ios objective-c uiactivityviewcontroller uiactivity

我有一个UIActivityViewController,允许用户将他们创建的图像分享到多种活动类型之一(Facebook,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调用需要转到其他地方。不知道该怎么做。

1 个答案:

答案 0 :(得分:4)

好的,事实证明我只是在犯这个错误......

我正在从- (id) activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType协议的UIActivityItemSource方法中获取我从代理中获取代码的代码。事实证明,该方法是在主线程上触发的。

相反,我在UIActivityItemProvider - (id) item方法中使用相同的代码,它就像魅力一样。