Dan*_*anM 6 objective-c ios uiactivity uiactivityviewcontroller
我有一个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];
Run Code Online (Sandbox Code Playgroud)
......不做这个工作.当我点击活动按钮时,UI会在生成图像时冻结,然后当它完成时,我会看到微调器一瞬间然后消失.
我认为endSpinner调用的定位是有道理的......然而,似乎startSpinner调用需要去其他地方.不知道该怎么做.
好吧,事实证明我只是在做错事......
我将“从委托中抓取图像”代码放入协议- (id) activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType的方法中UIActivityItemSource。事实证明该方法是在主线程上触发的。
相反,我将相同的代码放入 的UIActivityItemProvider方法中- (id) item,它的工作方式就像一个魅力。