IOS UIActivityIndicatorView、UIProgressView

来源:互联网 发布:淘宝怎么不能取消退款 编辑:程序博客网 时间:2024/04/25 14:29

UIActivityIndicatorView和UIProgressView都继承自UIView,所以他们可以附属在其他视图上。UIActivityIndicatorView是一个进度提示器,显示一个小圆圈在转动,主要用在一些耗时操作的提示上,比如网络请求;UIProgressView是一个进度提示条,不过它可以显示一个进度,可以告知用户操作已经进行了多少,这二者的目的都是为了在应用程序有耗时操作时在UI上进行显示,提高用户体验。

下面分别来创建这个两个控件:

首先在ViewController.h中声明代码:

[cpp] view plaincopy
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController  
  4.   
  5. @property(retain,nonatomic) UIActivityIndicatorView *activityIndicator;  
  6. @property(retain,nonatomic) UIProgressView *progressView;  
  7.   
  8. - (IBAction)startIndicator:(id)sender;  
  9. - (IBAction)startProgress:(id)sender;  
  10. - (IBAction)startNetWork:(id)sender;  
  11.   
  12. @end  

然后修改ViewController.m文件,具体的解释都在注释里面

[cpp] view plaincopy
  1. #import "ViewController.h"  
  2.   
  3. @interfaceViewController ()  
  4.   
  5. @end  
  6.   
  7. @implementation ViewController  
  8. @synthesize activityIndicator = _activityIndicator;  
  9. @synthesize progressView = _progressView;  
  10.   
  11. - (void)viewDidLoad  
  12. {  
  13.     [superviewDidLoad];  
  14.           
  15. }  
  16.   
  17. - (IBAction)startIndicator:(id)sender {  
  18.     //初始化指示器  
  19.     self.activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(140, 200, 30, 30)];  
  20.       
  21.     /* 
  22.      指定指示器的类型 
  23.      一共有三种类型: 
  24.      UIActivityIndicatorViewStyleWhiteLarge   //大型白色指示器    
  25.      UIActivityIndicatorViewStyleWhite      //标准尺寸白色指示器    
  26.      UIActivityIndicatorViewStyleGray    //灰色指示器,用于白色背景  
  27.      */  
  28.     self.activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;  
  29.       
  30.     //停止后是否隐藏(默认为YES)  
  31.     self.activityIndicator.hidesWhenStopped = YES;  
  32.       
  33.     //将Indicator添加到视图中  
  34.     [self.viewaddSubview:self.activityIndicator];  
  35.       
  36.     //开始转动  
  37.     [self.activityIndicator startAnimating];  
  38.       
  39.     //操作队列  
  40.     NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];  
  41.       
  42.     //设置最大的操作数  
  43.     [operationQueue setMaxConcurrentOperationCount:1];  
  44.   
  45.     //构建一个操作对象,selector指定的方法是在另外一个线程中运行的  
  46.     NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self   
  47.                                                                             selector:@selector(runIndicator) object:nil];  
  48.     //将操作加入队列,此时后台线程开始执行  
  49.     [operationQueue addOperation:operation];  
  50.   
  51. }  
  52.   
  53. - (IBAction)startProgress:(id)sender {  
  54.     self.progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(70, 260, 180, 20)];  
  55.     /* 
  56.      设置风格属性 
  57.      有两种风格属性: 
  58.      UIProgressViewStyleDefault 
  59.      UIProgressViewStyleBar 
  60.      */  
  61.     self.progressView.progressViewStyle = UIProgressViewStyleDefault;  
  62.       
  63.     //设置进度,值为0——1.0的浮点数  
  64. //    self.progressView.progress = .5;  
  65.     [self.viewaddSubview:self.progressView];  
  66.       
  67.     //设定计时器,每隔1s调用一次runProgress方法  
  68.     [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(runProgress)   userInfo:nil repeats:YES];  
  69. }  
  70.   
  71. //在状态栏显示有网络请求的提示器  
  72. - (IBAction)startNetWork:(id)sender {  
  73.     UIApplication *app = [UIApplication sharedApplication];  
  74.     if (app.isNetworkActivityIndicatorVisible) {  
  75.         app.networkActivityIndicatorVisible = NO;  
  76.     }else {  
  77.         app.networkActivityIndicatorVisible = YES;  
  78.     }  
  79. }  
  80.   
  81. -(void)runIndicator  
  82. {  
  83.     //开启线程并睡眠三秒钟  
  84.     [NSThread sleepForTimeInterval:3];  
  85.     //停止UIActivityIndicatorView  
  86.     [self.activityIndicator stopAnimating];  
  87. }  
  88.   
  89. //增加progressView的进度  
  90. -(void)runProgress  
  91. {  
  92.     self.progressView.progress += .1;  
  93. }  
  94.   
  95. - (void)viewDidUnload  
  96. {  
  97.     [superviewDidUnload];  
  98.     // Release any retained subviews of the main view.  
  99.     [self.activityIndicator release];  
  100.     [self.progressView release];  
  101. }  
  102.   
  103. @end  

编译运行后效果如下: