iPhone SDK: загрузите и установите UIImageView перед отображением первого контроллера - PullRequest
0 голосов
/ 06 декабря 2011

У меня проблемы с отображением UIImage сразу после завершения загрузки приложения и отображения первого контроллера представления.Существует задержка в отображении изображения из-за его загрузки из Интернета.Есть ли какой-нибудь метод, который вызывается перед applicationDidFnishLaunching, чтобы изображение можно было загружать и отображать мгновенно?

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

-(void)downloadImages {

    NSString *mainImagesJSON = [[NSString alloc]initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"mainImagesJSON.php"]]encoding:NSUTF8StringEncoding error:nil];
    SBJsonParser *parser = [[SBJsonParser alloc]init];

    NSDictionary  dictionary1 = [[parser objectWithString:mainImagesJSON error:nil]mutableCopy];


    mainImagesArray = [[dictionary1 valueForKey:@"imgSrc"]mutableCopy];

    NSString *imagesTablePath = [mainImagesArray objectAtIndex:0];
    NSURL *imgURL = [NSURL URLWithString:imagesTablePath];

    NSData *imageData = [NSData dataWithContentsOfURL:imgURL];
    UIImage *image1 = [UIImage imageWithData:imageData];

    imageStorageArray = [[NSMutableArray alloc]init];

    [imageStorageArray addObject:image1];



}

Тогда в первом viewController.m:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
UIImage *image1 = [[delegate imageStorageArray]objectAtIndex:0];
[mainHomeImageView setImage:image1];

Ответы [ 2 ]

0 голосов
/ 06 декабря 2011

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

Вы можете отобразить изображение-заполнитель(из ресурсов проекта), пока ваше изображение загружается из Интернета, затем замените его соответствующим изображением после его загрузки.

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

Эта библиотека предоставляет категорию для UIImageVIew с поддержкой удаленных изображений, поступающих из Интернета.

Она обеспечивает:

An UIImageView category adding web image and cache management to the Cocoa Touch framework
An asynchronous image downloader
An asynchronous memory + disk image caching with automatic cache expiration handling
A guarantee that the same URL won't be downloaded several times
A guarantee that bogus URLs won't be retried again and again
Performances!
0 голосов
/ 06 декабря 2011

На мой взгляд, у вас есть два варианта:

1: кэшировать изображение в каталоге Library/Caches при первом запуске и отвлекать пользователя какими-то всплывающими окнами или помощьюview.

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

...