Отображение индикатора выполнения во время действия UIActivityItemProvider

У меня есть UIActivityViewController, который позволяет пользователю делиться созданным изображением с одним из нескольких типов действий (facebook, twitter, сохранение в фотопленку, печать и т. д.).

Поскольку я хочу, чтобы изображение сохранялось/отправлялось с разным уровнем качества в зависимости от активности (высокое разрешение для печати, низкое разрешение для твиттера), я использую пользовательский UIActivityItemProvider для предоставления изображения.

Рендеринг версии с высоким разрешением занимает некоторое время, поэтому я хочу отображать индикатор активности, пока он делает свое дело. Документы 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];

... не выполняет свою работу. Когда я нажимаю кнопку активности, пользовательский интерфейс зависает во время создания изображения, а затем, когда он заканчивается, я вижу счетчик на долю секунды, а затем он исчезает.

Я думаю, что позиционирование вызова endSpinner имеет смысл... однако кажется, что вызов startSpinner должен идти куда-то еще. Не знаю, что здесь делать.


person DanM    schedule 13.08.2014    source источник


Ответы (1)


Хорошо, оказывается, я просто ошибся в этом...

Я помещал свой код захвата изображения у делегата в метод - (id) activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType из протокола UIActivityItemSource. Оказывается, этот метод запускается в основном потоке.

Вместо этого я поместил тот же код в метод - (id) item UIActivityItemProvider, и он работает как шарм.

person DanM    schedule 13.08.2014