121

Safari やメールなどの一部のアプリでは、ネットワークにアクセスしているときに、ステータス バー (電話の最上部にあるバー) に読み込みインジケーターが表示されることに気付きました。SDK アプリで同じことを行う方法はありますか、それとも Apple だけのものですか?

4

8 に答える 8

214

それはUIApplicationにあります:

目標 C の場合:

始める:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

終わり:

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

迅速な場合:

始める

UIApplication.shared.isNetworkActivityIndicatorVisible = true

終わり

UIApplication.shared.isNetworkActivityIndicatorVisible = false
于 2008-10-03T13:06:14.293 に答える
30

次のマクロが非常に便利であることがわかりました。

#define ShowNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = YES
#define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO

ShowNetworkActivityIndicator();そのため、アプリ内からまたはアプリ内から呼び出すことができHideNetworkActivityIndicator();ます (もちろん、ヘッダーが含まれている限り!)。

于 2009-11-17T18:51:08.110 に答える
25

何が起こっているかのカウンターを保持することにより、複数の接続の問題を解決するシングルトンを作成しました(接続が返されたが、別の接続がまだアクティブな場合にステータスを削除しないようにするため)。

ヘッダー ファイル:

#import <Foundation/Foundation.h>

@interface RMActivityIndicator : NSObject

-(void)increaseActivity;
-(void)decreaseActivity;
-(void)noActivity;

+(RMActivityIndicator *)sharedManager;

@end

と実装:

#import "RMActivityIndicator.h"

@interface RMActivityIndicator ()

@property(nonatomic,assign) unsigned int activityCounter;

@end

@implementation RMActivityIndicator

- (id)init
{
    self = [super init];
    if (self) {
        self.activityCounter = 0;
    }
    return self;
}

    -(void)increaseActivity{
        @synchronized(self) {
             self.activityCounter++;
        }
        [self updateActivity];
    }
-(void)decreaseActivity{
    @synchronized(self) {
           if (self.activityCounter>0) self.activityCounter--;
    }
    [self updateActivity];
}
-(void)noActivity{
    self.activityCounter = 0;
    [self updateActivity];
}

-(void)updateActivity{
    UIApplication* app = [UIApplication sharedApplication];
    app.networkActivityIndicatorVisible = (self.activityCounter>0);
}

#pragma mark -
#pragma mark Singleton instance

+(RMActivityIndicator *)sharedManager {
    static dispatch_once_t pred;
    static RMActivityIndicator *shared = nil;

    dispatch_once(&pred, ^{
        shared = [[RMActivityIndicator alloc] init];
    });
    return shared;
}

@end

例:

    [[RMActivityIndicator sharedManager]increaseActivity];
    [NSURLConnection sendAsynchronousRequest:urlRequest queue:self.networkReceiveProcessQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    {
        [[RMActivityIndicator sharedManager]decreaseActivity];
    }
于 2012-11-16T08:18:36.703 に答える
19

これを行うための1行のコード:

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
于 2012-11-29T10:33:09.343 に答える
5

ネットワーク呼び出しが完了したら、アクティビティ インジケーターも非表示にする必要があります。

を使用する場合はAFNetworking、多くのことを行う必要はありません。

AppDelegateクラスで次の変更を行います。

  1. 輸入AFNetworking/AFNetworkActivityIndicatorManager.h

  2. これを入れてdidFinishLaunchingWithOptions:

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]

于 2016-02-17T05:59:48.493 に答える
2

UI 関連であるため、メイン スレッドで実行していることを確認することも役立つ場合があります。

dispatch_async(dispatch_get_main_queue(), ^{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
});
于 2015-03-13T19:49:42.730 に答える