Как получить уведомление о imageWithContentsOfFile: завершение? - PullRequest
2 голосов
/ 21 марта 2011

Я загружаю огромное-огромное изображение с помощью imageWithContentsOfFile:, поэтому я должен установить ActivityIndicator во время процесса.

Есть ли какой-либо способ / любой обратный вызов делегата, который я могу использовать, чтобы получить информацию об окончании этого процесса загрузки?

Ответы [ 3 ]

3 голосов
/ 21 марта 2011

imageWithContentsOfFile синхронно.

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

- (void)loadBigImage {
    [activityIndicator startAnimating];
    [self performSelectorInBackground:@selector(loadBigImageInBackground) withObject:nil];
}

- (void)loadBigImageInBackground {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    UIImage *img = [UIImage imageWithContentsOfFile:@"..."];
    [self performSelectorOnMainThread:@selector(bigImageLoaded:) withObject:img waitUntilDone:NO];
    [pool release];
}

- (void)bigImageLoaded:(UIImage *)img {
    [activityIndicator stopAnimating];
    // do stuff 
}
0 голосов
/ 21 марта 2011

Если вы хотите иметь делегата и получать информацию о ходе загрузки, вы можете использовать NSURLConnection вместо синхронного imageWithContentsOfFile.

. В Apple есть пример этого Руководство по программированию системы загрузки URL

Ваш метод делегата NSURLConnection didReceiveData: может добавить входящие данные к объекту NSData, тогда вы будете использовать UIImage imageWithData: для создания их изображения после того, как все будет загружено.

Это дает вам наибольшую гибкость / контроль над ходом нагрузки;хотя, если все, что вы пытаетесь сделать, это избегать зависания пользовательского интерфейса во время загрузки изображения, просто использовать imageWithContentsOfFile в фоновом потоке может быть проще.

0 голосов
/ 21 марта 2011

Краткий ответ: Нет.извините!

Длинный ответ:

Вы можете поочередно открыть файл в фоновом процессе (NSOperation?), используя методы стиля C, например, fopen, fread и т. д.), и отправлять уведомления обратно восновная нить во время загрузки.Затем создать изображение и запустить уведомление, что изображение готово?

...