0

2 つの Web サービスを同時に呼び出しています。その時点でアクティビティ インジケーターが表示されています。どちらのサービスが先に終了してもかまいません。アクティビティ インジケーターを非表示にする方法がわかりません。フラグを使用することを考えています。しかし、それがより良い方法であるかどうかはわかりません。より良いアプローチで私を助けてください。

4

3 に答える 3

0

簡単な方法の 1 つは、NetworkActivityIndi​​cator を処理する AFNetworking ライブラリを使用することです。[[AFNetworkActivityIndi​​catorManger sharedManager] setEnabled:YES]; を設定するだけです。あなたのアプリデリゲートで。

それ以外の場合は、カウンターを維持するのが良い方法です。各 Web リクエストを開始するときは、カウンターをインクリメントし、成功ブロックまたは失敗ブロックでカウンターをデクリメントします。それらのブロックで、カウンターをデクリメントした後、カウンターがゼロに等しい場合は、[UIApplication sharedApplication] の isNetworkActivityIndcatorVisible プロパティを NO に設定します。

于 2013-06-11T11:50:28.283 に答える
0
You need to create a method in AppDelegate.m class

#pragma mark activity indicator view
-(void)showActivityViewer:(NSString* )msg
{
    if (activityView1 == nil)
    {
        [activityView1 release];

        activityView1 = [[UIView alloc] initWithFrame: CGRectMake(0, 0, 320, 580)];
        activityView1.backgroundColor = [UIColor darkGrayColor];
        activityView1.alpha = 0.8;

        UILabel* lblLoading=[[UILabel alloc] initWithFrame:CGRectMake(70, 260, 180, 60)];
        lblLoading.numberOfLines=0;
        lblLoading.text=msg;
        lblLoading.backgroundColor=[UIColor clearColor];
        lblLoading.textAlignment=UITextAlignmentCenter;
        [lblLoading setContentMode:UIViewContentModeBottom];
        lblLoading.textColor=[UIColor whiteColor];
        [activityView1 addSubview:lblLoading];
        [lblLoading release];

        UIActivityIndicatorView *activityWheel = [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(self.window.bounds.size.width / 2 - 15, self.window.bounds.size.height / 2 - 30, 30, 30)];
        activityWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
        activityWheel.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                          UIViewAutoresizingFlexibleRightMargin |
                                          UIViewAutoresizingFlexibleTopMargin |
                                          UIViewAutoresizingFlexibleBottomMargin);
        [activityView1 addSubview:activityWheel];
        [activityWheel release];
    }

    [self.window addSubview: activityView1];

    [[[activityView1 subviews] objectAtIndex:0] setText:msg];
    [[[activityView1 subviews] objectAtIndex:1] startAnimating];
}

全体でアクティビティインジケータを表示する必要があるたびに、これを使用します...すべてのものを自動的に管理します

インジケーターを非表示にするには、このメソッドを呼び出します。AppDelegate.m クラスと同じです。

-(void)hideActivityViewer
{
    [[[activityView1 subviews] objectAtIndex:1] stopAnimating];
    [activityView1 removeFromSuperview];
}
于 2013-06-11T13:30:23.730 に答える