UIButton изображение асинхронно - PullRequest
1 голос
/ 11 ноября 2011

У меня есть группа UIButton в UIScrollView, и каждая UIButton берет изображение из URL. Как проще всего загружать изображение асинхронно?

Например, обычный способ:

[button setImage:[UIImage imageWithData:data] forState:UIControlStateNormal];

но это блокирует пользовательский интерфейс, я не хочу его

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

Вы можете попробовать это

     [self performSelectorInBackground:@selector(loadImag) withObject:nil];

В функции loadImage загрузите изображение из URL, а затем назначьте его кнопке.Я не уверен, что это сработает для вас ... Поскольку я новичок в разработке цели C

0 голосов
/ 11 ноября 2011

Полагаю, все в порядке, если вы блокируете во время загрузки одного изображения? Проблема в том, что у вас их много? Если это так, то я бы сделал так (темы не нужны):

#define DELAY 0.1 // you may set it to 0 as well

    ...
    [self performSelector:@selector(setupButton:)
               withObject:[NSNumber numberWithInt:0]
               afterDelay:DELAY];
    ...

-(void)setupButton:(NSNumber*)count
{
    UIButton *button = [self buttonFromMyScrollViewWithCount:count.intValue];
    [button setImage:...];
    if (count.intValue < self.numberOfButtonsInMyScrollView)
        [self performSelector:@selector(setupButton:)
                   withObject:[NSNumber numberWithInt:count.intValue + 1]
                   afterDelay:DELAY];
}
0 голосов
/ 11 ноября 2011

Попробуйте с NSInvocationOperation, сделайте синхронный запрос для каждой кнопки изображения ... Передайте кнопку в качестве параметра, что-то вроде этого, я имею в виду ...

Инициируйте очередь операций (возможно, при инициализации):

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

запуск вызова операции для каждой кнопки ...

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self 
                                                                        selector:@selector(getImageFromURL:) 
                                                                          object:[NSDictionary dictionaryWithObjectsAndKeys:@"http://getMyImage.com/resource.jpg", @"url", button, @"button", nil]];

[queue addOperation:operation];
[operation release];

это может быть ваш getImageFromURL: селектор

- (void) getImageFromURL:(NSDictionary*)dict
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSURL *url = [NSURL URLFromString:[dict objectForKey:@"url"]];
    UIButton *button = [dict objectForKey:@"button"];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
    UIImage *image = [[UIImage alloc] initWithData:data];

    // Finally set the button image and release image ...
    [pool drain];
}

Не забудьте освободить очередьна dealloc ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...