2012-06-26 2 views
0

Я пытаюсь показать индикатор активностиvw, когда пользователь нажимает на ячейку таблицы просмотра, которую он должен показывать, и как только подробный просмотр загружен, он должен быть скрыт.tableView didSelectRowAtIndexPath: индикатор активности не отображается должным образом

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

Внутри viewdidload:

activityBgImageView = [[UIView alloc] initWithFrame:self.view.frame]; 
[activityBgImageView setBackgroundColor:[UIColor blackColor]]; 
[activityBgImageView setAlpha:0.7]; 
[activityBgImageView setCenter:self.view.center]; 
[activityBgImageView setHidden:YES]; 

activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
[activityIndicatorView setCenter:CGPointMake(self.view.center.x+15, self.view.center.y-15)]; 
[activityIndicatorView setHidesWhenStopped:YES]; 
[activityBgImageView addSubview:activityIndicatorView]; 
[self.view addSubview:activityBgImageView]; 

Вот мой код таблицы сделал выбор:

if([arrPostsData count]>0) 
{ 
    [self startActivityIndicatorView]; 

    [self performSelector:@selector(showDetailVw) withObject:nil]; 

} 

-(void)showDetailVw 
{ 

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:.3]; 
detailVwBg.alpha = 0.0; 
detailVwBg.alpha = 1.0; 
btnBack.alpha = 1; 

[self showPostDetail:arrPostsData tapedCell:detailvwScrollCount  PostedFiles:arrUserPostedFilesDataDic comments:arrCommentsDataDic]; 

isDetailvwActive = TRUE; 
[UIView commitAnimations]; 

} 

and inside showPostDetail: method end i stop the indicator 

Пожалуйста, укажите, где мне нужно поставить правильный код

это методы индикаторов:

#pragma mark processindicator methods 

-(void)startActivityIndicatorView{ 

[activityBgImageView setHidden:NO]; 
[activityIndicatorView startAnimating]; 
[self.view bringSubviewToFront:activityBgImageView]; 

if (![[UIApplication sharedApplication] isIgnoringInteractionEvents]) 
{ 
    [[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
} 


} 

-(void)stopActivityIndicatorView{ 


if ([[UIApplication sharedApplication] isIgnoringInteractionEvents]) 
{ 
    [[UIApplication sharedApplication] endIgnoringInteractionEvents]; 
} 
[activityBgImageView setHidden:YES]; 
[activityIndicatorView stopAnimating]; 

} 
+0

Вы уверены, что пользователь (и себя), должно быть в состоянии видеть индикатор отображается в течение примерно 0,3 секунды? –

+0

не удалось увидеть индикатор. –

+0

Я пытался пробовать то же самое, что смог. –

ответ

3

Немного фона о потоках & iOS. Для изменения всех элементов пользовательского интерфейса (визуально) программисту необходимо внести изменения в основной поток.

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

Если вы хотите, чтобы это сработало, сначала запустите прядильщик, затем фоновый поток, выполните обработку в потоке bg после того, как он завершится, зайдите в основной поток, остановите счетчик и, наконец, обновите пользовательский интерфейс с изменениями.

Надеется, что это помогает ...

+0

Тест на iOS, хотя ответ Strikar может быть немного «подавляющим», это правильный ответ. Проделайте немного исследований о том, как достичь этого и немного поиграть с ним, если у вас есть больше сомнений, создайте еще один вопрос, но убедитесь, что он соответствует определенному FAQ StackOverflow. – Peres

+0

"подавляющее"? –

+0

Да, если человек не знаком с разработкой iPhone, то, возможно, что-то, что вы сказали. – Peres

Смежные вопросы