引言
iOS 7 之后苹果推出了一个新的类 NSProgress 专门用来管理进度,比如在下载数据或者执行任务的时候要显示进度,那么这个类就可以很方便地对进度进行管理,供开发者拿去控制表示进度的UI界面。
这个类的用法其实很简单,总结起来就是下面几个步骤:
- 创建实例,同时设定表示任务要完成的数量的总值(这个总值只是一个用来计算比例的概念);
- 配置KVO观察其进度的变化,从而对UI做出更新(NSProgress 类就是搭配 KVO 来操作的,关于 KVO 是什么可以看我这篇博客:iOS键值观察KVO实例详解);
- 执行任务,在执行过程中递增表示已完成任务量的属性(这个属性用来判断任务完成情况,供计算比例以及是否完成任务);
- 在 KVO 的响应方法中对UI进行更新操作,改变UI显示的当前进度值。
就这么多了,具体的用法我们举三个例子:单任务的执行、多任务的执行、以及 iOS 9 下新的多任务执行方法。
单任务执行
直接上代码:
@interface ViewController ()
@property (nonatomic, strong) NSProgress *progress;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
// 创建实例
self.progress = [NSProgress progressWithTotalUnitCount:10];
// 配置KVO观察
[self.progress addObserver:self forKeyPath:@"fractionCompleted" options:NSKeyValueObservingOptionNew context:nil];
// 每秒执行一次任务
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doTask) userInfo:nil repeats:YES];
}
- (void)doTask {
if (self.progress.completedUnitCount < self.progress.totalUnitCount) {