UIActivityIndicatorView при загрузке изображения из онлайн? - PullRequest
1 голос
/ 11 марта 2011

У меня есть простой скрипт, который отображается в UIImageView из Интернета.

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

Вот мой минимальный код:

NSString *imagePath = [NSString stringWithFormat:@"urlofimagehere.jpg"];
NSData *mydata = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imagePath]];
UIImage *myimage = [[UIImage alloc] initWithData:mydata];
[imageView setImage:myimage];
[myimage release];

Спасибо! Колтон

РЕДАКТИРОВАТЬ: КОД УДАЛЕН

1 Ответ

3 голосов
/ 11 марта 2011
-[NSData initWithContentsOfURL:]

- синхронный метод.Это означает, что он будет блокироваться, пока данные не будут загружены по сети.Если вы хотите, чтобы ваш пользовательский интерфейс реагировал, вы должны использовать асинхронный подход.Для получения дополнительной информации прочитайте это: http://akosma.com/2010/05/28/initwithcontentsofurl-methods-considered-harmful/

Я бы порекомендовал использовать NSURLRequest с NSURLRequestDelegate для получения обратных вызовов после завершения загрузки данных.Вот пример:

- (void)loadImageAtURL(NSString *)urlString {
    [myUIActivityIndicatorView startAnimating];

    // SHOW NETWORK INDICATOR
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    // SET UP THE REQUEST
    NSURL *url = [[NSURL alloc] initWithString:urlString];
    NSURLRequest *request = [[[NSURLRequest alloc] initWithURL:url] autorelease];

    // SET UP THE CONNECTION
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    mutData = [[[NSMutableData alloc] init] retain];
}

- (void)connection:(NSURLConnection *)connection
  didFailWithError:(NSError *)error {
    // Handle error
}

- (void)connection:(NSURLConnection *)connection
    didReceiveData:(NSData *)data {
    [mutData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)aConnection {

    // ONCE LOADED HIDE NETWORK INDICATOR
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    // RELEASE THE CONNECTION
    [connection release];

    // CREATE NEW UIIMAGE FROM THE DATA
    image = [[[UIImage alloc] initWithData:mutData] retain];
    [mutData release];

    // HIDE THE ACTIVITY INDICATOR
    // Make sure hidesWhenStopped is set to YES on the activity indicator.
    [myUIActivityIndicatorView stopAnimating];
    [myUIImageView setImage:image];
    [image release];
}

Надеюсь, это поможет!

...