didSelectRowAtIndexPath не показывает представление - PullRequest
3 голосов
/ 01 сентября 2009

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

Эта загрузка занимает около 10 секунд, и я хотел бы показать небольшой вид с вращающейся иконкой.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    loadingView = [[LoadingHUDView alloc] initWithTitle: NSLocalizedString(@"Loading image",@"")];
    [self.view addSubview:loadingView];
    [loadingView startAnimating];
    loadingView.center = CGPointMake(self.view.bounds.size.width/2, 150);
    [imageView loadImage: path];
    [loadingView removeFromSuperview];
}

Проблема в том, что представление (loadingView) никогда не отображается. Кажется, что вызов loadImage мешает его отображению. Могу ли я заставить это представление отображаться ??

1 Ответ

2 голосов
/ 01 сентября 2009

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

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

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

Поместите код для загрузки большого изображения в другой метод, а затем запустите его в фоновом потоке следующим образом:

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

Помните, что внутри вашего метода -loadBigImage вам нужно объявить пул NSAutorelease:

-(void)loadBigImage {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    //Code to load big image up
    [pool drain];
}

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

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

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