文章目录
2.6 开始和关闭繁忙模式
还记得当LightWork忙于保存或共享照片时,我们希望显示活动指示符并禁用所有工具栏项。相反,当LightWork不再忙于处理照片时,我们希望隐藏活动指示符并重新启用工具栏项。由于这些操作影响用户界面,我们必须确保它们在应用程序的主线程上运行。
[如果我们的代码是在后台线程上运行的,那么当我们试图显示或隐藏活动指示器时,什么也不会发生。]
为了在特定的线程上运行代码,我们可以向线程的事件队列中添加任务。iOS SDK提供一个C函数dispatch_async,它接受目标队列和block作为参数。另一个C函数dispatch_get_main_queue()允许我们获取主线程的事件队列。让我们在下面的帮助方法中使用这些函数,它启动忙碌模式:
- (void)startBusyMode{
dispatch_async(dispatch_get_main_queue(), ^{
[self.activityIndicatorView startAnimating];
for (UIBarItem *item in self.toolbar.items) {
item.enabled = NO;
}
});
}
类似,以下的帮助函数停止忙碌模式:
- (void)stopBusyMode {
dispatch_async(dispatch_get_main_queue(), ^{
[self.activityIndicatorView stopAnimating];
for (UIBarItem *item in self.toolbar.items) {
item.enabled = YES;
}
});
}