活动指示器(UIActivityIndicatorView)可以告知用户有一个操作正在进行中。进度指示器(UIProgressView
这两个指示器都是派生自UIView,所以他们是视图,也可以附着在视图上。
一、UIActivityIndicatorView 活动指示器
1.创建
- UIActivityIndicatorView*
activityIndicatorView = [ [ UIActivityIndicatorView alloc ] -
initWithFrame:CGRectMake(250.0,20.0,30.0,30.0)];
风格:
- activityIndicatorView.activityIndicatorViewSty
le= UIActivityIndicatorViewS tyleGray;
- UIActivityIndicatorViewS
tyleWhiteLarge 大型白色指示器
- UIActivityIndicatorViewS
tyleWhite 标准尺寸白色指示器
- UIActivityIndicatorViewS
tyleGray 灰色指示器,用于白色背景
- 自动隐藏
- activityIndicatorView.hidesWhenStoped
= NO;
可以将它附着在任何视图上,比如表格单元、或者视图:
- [
self.view addSubview:activityIndicatorView ];
4.启动和停止
- [
activityIndicatorView startAnimating ];//启动 - [
activityIndicatorView stopAnimating ];//停止
UIProgressView 与UIActivityIndicatorView相似,只不过它提供了一个接口让你可以显示一个类似进度条的东西,这样就能让用户知道当前操作完成了多少。
1.创建
- UIProgressView*
progressView = [ [ UIProgressView alloc ] -
initWithFrame:CGRectMake(150.0,20.0,130.0,30.0)];
风格:
- progressView
.UIProgressViewStyle= UIProgressViewStyleDefau lt;
- UIProgressViewStyleDefau
lt 标准进度条
- UIProgressViewStyleDefau
lt 深灰色进度条,用于工具栏中
3.显示
- [
self.toolBar addSubview:progressView ];
- 当它显示出来时你的程序可以更新它的进度,属性progre是一个0.0到1.0之间的浮点数:
- progressView.progress
= 0. 5;
三、网络活动指示器
- 当你的应用程序使用网络时,应当在iPhone的状态条上放置一个网络指示器,警告用户正在使用网络。这时你可以用UIApplication的一个名为networkActivityIndicator
Visible的属性。通过设置这个可以启用或禁用网络指示器:UIApplication* app = [ UIApplication sharedApplication ]; - pp.networkActivityIndicator
Visible = YES;
UIActivityIndicatorView和UIProgressView都继承自UIView,所以他们可以附属在其他视图上。UIActivityIndicatorView是一个进度提示器,显示一个小圆圈在转动,主要用在一些耗时操作的提示上,比如网络请求;UIProgressView是一个进度提示条,不过它可以显示一个进度,可以告知用户操作已经进行了多少,这二者的目的都是为了在应用程序有耗时操作时在UI上进行显示,提高用户体验。
下面分别来创建这个两个控件:
首先在ViewController.h中声明代码:
- #import
<UIKit/UIKit.h> -
- @interface
ViewController : UIViewController -
- @property(retain,nonatomic)
UIActivityIndicatorView *activityIndicator; - @property(retain,nonatomic)
UIProgressView *progressView; -
- -
(IBAction)startIndicator:(id)sender; - -
(IBAction)startProgress:(id)sender; - -
(IBAction)startNetWork:(id)sender; -
- @end
然后修改ViewController.m文件,具体的解释都在注释里面
- #import
"ViewController.h" -
- @interfaceViewController
() -
- @end
-
- @implementation
ViewController - @synthesize
activityIndicator = _activityIndicator; - @synthesize
progressView = _progressView; -
- -
(void)viewDidLoad - {
-
[superviewDidLoad]; -
- }
-
- -
(IBAction)startIndicator:(id)sender { -
//初始化指示器 -
self.activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(140, 200, 30, 30)]; -
-
-
self.activityIndicator.activityIndicatorViewSty le = UIActivityIndicatorViewS tyleWhite; -
-
//停止后是否隐藏(默认为YES) -
self.activityIndicator.hidesWhenStopped = YES; -
-
//将Indicator添加到视图中 -
[self.viewaddSubview:self.activityIndicator]; -
-
//开始转动 -
[self.activityIndicator startAnimating]; -
-
//操作队列 -
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init]; -
-
//设置最大的操作数 -
[operationQueue setMaxConcurrentOperatio nCount:1]; -
-
//构建一个操作对象,selector指定的方法是在另外一个线程中运行的 -
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self -
selector:@selector(runIndicator) object:nil]; -
//将操作加入队列,此时后台线程开始执行 -
[operationQueue addOperation:operation]; -
- }
-
- -
(IBAction)startProgress:(id)sender { -
self.progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(70, 260, 180, 20)]; -
-
self.progressView.progressViewStyle = UIProgressViewStyleDefau lt; -
-
//设置进度,值为0——1.0的浮点数 - //
self.progressView.progress = .5; -
[self.viewaddSubview:self.progressView]; -
-
//设定计时器,每隔1s调用一次runProgress方法 -
[NSTimer scheduledTimerWithTimeIn terval:1 target:self selector:@selector(runProgress) userInfo:nil repeats:YES]; - }
-
- //在状态栏显示有网络请求的提示器
- -
(IBAction)startNetWork:(id)sender { -
UIApplication *app = [UIApplication sharedApplication]; -
if (app.isNetworkActivityIndicat orVisible) { -
app.networkActivityIndicator Visible = NO; -
}else { -
app.networkActivityIndicator Visible = YES; -
} - }
-
- -(void)runIndicator
- {
-
//开启线程并睡眠三秒钟 -
[NSThread sleepForTimeInterval:3]; -
//停止UIActivityIndicatorView -
[self.activityIndicator stopAnimating]; - }
-
- //增加progressView的进度
- -(void)runProgress
- {
-
self.progressView.progress += .1; - }
-
- -
(void)viewDidUnload - {
-
[superviewDidUnload]; -
// Release any retained subviews of the main view. -
[self.activityIndicator release]; -
[self.progressView release]; - }
-
- @end
编译运行后效果如下:
![[转]UIActivityIndicatorView、UIProgressView <wbr>活动与进度指示器-IOS开发](https://img-my.youkuaiyun.com/uploads/201208/01/1343795908_6464.png)
四、拓展
- 是不是觉得又学了点新东西呢?确实。不过我还有个更好的东西推荐:MBProgressHUD
https://github.com/jdg/MBProgressHUD 一个更NB的第三方进度指示器,你可以按照它提供的例子去使用它,很强大的。不过有一点我要提醒你的是它是异步的,所以并不能阻塞你当前的程序,如果你想阻塞你的程序还要在逻辑控