iOS提供两种等待指示器:等待指示器控件(UIActivityIndicatorView)和网络等待指示器。
下面介绍UIActivityIndicatorView的使用:
1、使用目的:APP请求网络资源,请求的数据需要一段时间才能返回,为了给用户更好的体验,使用等待指示器。
2、使用方式\方法:
从技术角度说:作为控件,等待指示器可以放置于视图中。
从设计规范讲:等待指示器应该放置于工具栏、导航栏以及弹出的对话框中,请求结束应该消失。
下面将等待指示器放置在导航栏上:
- (void)showActivityIndicatorViewInNavigationItem
{
UIActivityIndicatorView *aiview = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 【1】
self.navigationItem.titleView = aiview ; 【2】
[aiview startAnimating]; 【3】
self.navigationItem.prompt = @"数据加载中...."; 【4】
}
- (void)viewDidLoad
{
....
// 查询请求数据
action = ACTION_QUERY;
[self startRequest];
// 请求发出后,指示器开始旋转
[self showActivityIndicatorViewInNavigationItem];
// 初始化UIRefreshControl
UIRefreshControl *rc = [[UIRefreshControl alloc] init ];
rc.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉刷新..."] ;
[rc addTarget:self action:@selector(refreshTableView)
forControlEvents:UIControlEventValueChanged ];
self.refreshControl = rc ;
}
- (void)reloadView:(NSDictionary *)resDict
{
[self.refreshControl endRefreshing];
self.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉刷新..."] ;
// 请求完成,停止等待指示器,恢复导航栏
self.navigationItem.titleView = nil; 【5】
self.navigation.prompt= nil;
........
}
【1】:设置等待指示器的样式
【2】:设置titleView属性,就不能显示title属性了(注:title属性和titleView属性的位置是重合的)
【3】:开始动画,指示器旋转
【4】:prompt属性常用于提示用户
【5】:清除titleView属性,显示title属性
【注:】等待指示器常用方法:
- startAnimating:开始旋转动画
- stopAnimating:停止动画,停止旋转
- isAnimating:判断是否在旋转
hidesWhenStopped属性:Bool值,设置等待控制器停止旋转时隐藏,这个属性很重要。
说明:停止等待指示器本来应该调用stopAnimating方法,而放在导航栏项目中的等待指示器控件有所不同,更重要的是移除这个控件,让原来的title显示出来。