此代码与networkActivityIndicatorVisible一起使用是否正确?
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
UIApplication* app2 = [UIApplication sharedApplication];
app2.networkActivityIndicatorVisible = YES;
[self loadSources]; // Loads data in table view
app2.networkActivityIndicatorVisible = NO;
}
Run Code Online (Sandbox Code Playgroud)
张志贤
Jan*_*ano 17
由于NetworkActivityIndicatorVisible可以在连接仍处于活动状态时从多个点进行设置,因此您需要跟踪启用/禁用连接的呼叫数.以下UIApplication类别仅使用静态变量:
// file UIApplication+NetworkActivity.h
@interface UIApplication (NetworkActivity)
- (void)showNetworkActivityIndicator;
- (void)hideNetworkActivityIndicator;
@end
// file UIApplication+NetworkActivity.m
#import "UIApplication+NetworkActivity.h"
static NSInteger activityCount = 0;
@implementation UIApplication (NetworkActivity)
- (void)showNetworkActivityIndicator {
if ([[UIApplication sharedApplication] isStatusBarHidden]) return;
@synchronized ([UIApplication sharedApplication]) {
if (activityCount == 0) {
[self setNetworkActivityIndicatorVisible:YES];
}
activityCount++;
}
}
- (void)hideNetworkActivityIndicator {
if ([[UIApplication sharedApplication] isStatusBarHidden]) return;
@synchronized ([UIApplication sharedApplication]) {
activityCount--;
if (activityCount <= 0) {
[self setNetworkActivityIndicatorVisible:NO];
activityCount=0;
}
}
}
@end
Run Code Online (Sandbox Code Playgroud)
现在导入UIApplication+NetworkActivity.h您的客户端代码并调用
// on connection started:
[[UIApplication sharedApplication] showNetworkActivityIndicator];
// on connection finished:
[[UIApplication sharedApplication] hideNetworkActivityIndicator];
Run Code Online (Sandbox Code Playgroud)
如果您担心指示灯只闪烁一秒钟,则不需要后台处理.只需调用,[self performSelector:@selector(loadSources) withObject:Nil afterDelay:0.1]以便UI线程有时间在阻止主线程之前启动网络指示器动画.
如果您还没有使用AFNetworking(https://github.com/AFNetworking/AFNetworking),您可以在AFNetworkingActivityIndicatorManager中查看他们的网络活动指示器实现.
如果您确实选择使用此库进行网络访问,则会自动为您处理网络活动指示.您需要做的就是在AppDelegate中进行一次调用以进行设置,他们会为您完成剩余的工作.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
}
Run Code Online (Sandbox Code Playgroud)