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

Posted

技术标签:

【中文标题】在 UIActivityItemProvider 活动期间显示进度指示器【英文标题】:Displaying a progress indicator during UIActivityItemProvider activity 【发布时间】:2014-08-13 04:25:35 【问题描述】:

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

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

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

但我似乎无法确定放置用于显示我的进度指示器的钩子的“正确”位置......它们应该放在哪里?

更新:- (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】:

好吧,原来我只是在处理这个错误......

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

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

【讨论】:

以上是关于在 UIActivityItemProvider 活动期间显示进度指示器的主要内容,如果未能解决你的问题,请参考以下文章

当 UIActivityViewController 呈现时,如何确保 UIActivityItemProvider 的项目准备就绪?

Xcode 8 beta 6 UIActivityItemProvider 错误与@objc 兼容性

iOS UIActivityViewController 使用 UIActivityItemProvider “忘记”项目

UIActivityViewController 的标题是怎么设置的?

在 Xcode 中使用 UIActivityViewController 填写电子邮件标题(和附件)

UIActivityViewController:可以通过配置步骤实现流程吗?