networkActivityIndi​​catorVisible [英] networkActivityIndicatorVisible

查看:138
本文介绍了networkActivityIndi​​catorVisible的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此代码与networkActivityIndi​​catorVisible一起使用是否正确?

Is this code correct to use with the 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; 
}

Teo

推荐答案

由于 NetworkActivityIndi​​catorVisible 可以在连接仍处于活动状态时从多个点设置,因此您需要跟踪启用/禁用的呼叫数量它。以下 UIApplication 类别仅使用静态变量:

Since NetworkActivityIndicatorVisible can be set from several points while a connection is still active, you need to track the number of calls that enable/disable it. The following UIApplication category does just that using a static variable:

// 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

现在在您的客户端代码中导入 UIApplication + NetworkActivity.h 并致电

Now import UIApplication+NetworkActivity.h in your client code and call

// on connection started:
[[UIApplication sharedApplication] showNetworkActivityIndicator];

// on connection finished:
[[UIApplication sharedApplication] hideNetworkActivityIndicator];

如果您担心指标只闪烁一秒钟,则不需要后台处理。只需调用 [self performSelector:@selector(loadSources)withObject:Nil afterDelay:0.1] ,这样UI线程就有时间在阻止主线程之前启动网络指示器动画。

If your concern is that the indicator blinks for only a second, you don't need a background process. Just call [self performSelector:@selector(loadSources) withObject:Nil afterDelay:0.1] so the UI thread has time to start the network indicator animation before you block the main thread.

这篇关于networkActivityIndi​​catorVisible的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆