6

UIActivityViewControllerユーザーが作成した画像をいくつかのアクティビティタイプ (facebook、twitter、カメラロールに保存、印刷など) のいずれかに共有できるようにする機能があります。

アクティビティに応じてさまざまな品質レベル (印刷用の高解像度、Twitter 用の低解像度) で画像を保存/送信したいので、カスタムUIActivityItemProviderを使用して (当然のことながら) 画像を提供しています。

高解像度バージョンのレンダリングには時間がかかるため、動作中のアクティビティ インジケーターを表示したいと考えています。アップルのドキュメントは、実際にそれを行うことについて言及しています。

しかし、進行状況インジケーターを表示するためのフックを配置する「正しい」場所を理解できないようです...どこに行くべきですか?

更新:- (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's- (id) itemメソッドに入れると、魅力的に機能します。

于 2014-08-13T14:55:07.093 に答える