0

ユーザーがテーブルビューのセルをタップすると表示され、詳細ビューが読み込まれるとすぐに非表示になるはずのアクティビティインジケーターvwを表示しようとしています。

ただし、ビューが読み込まれた後に表示されてから非表示になります。したがって、ビューの読み込み中にインジケーターを表示することは無意味です

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];

}
4

1 に答える 1

3

スレッドとiOSについて少し背景を説明します。すべてのUI要素を(視覚的に)変更するには、プログラマーはメインスレッドでそれらを変更する必要があります。

はUI要素であるためactivityIndicatorView、回転を表示するにはメインスレッドで実行する必要があります。メインスレッドで何か他のことをしている場合activityIndicatorViewは、ブロックされます。したがって、瞬時に回転することはありません。スレッドが解放されると表示されます。

これを機能させたい場合は、最初にスピナーを起動し、次にバックグラウンドスレッドを起動し、bgスレッドで処理を実行します。完了したら、メインスレッドに移動し、スピナーを停止して、最後にUIを変更で更新します。

お役に立てれば...

于 2012-06-26T13:47:47.413 に答える