网络活动指示器出现在状态栏中,显示正在发生网络活动。网络活动指示器
- 在网络活动进行时在状态栏中旋转,并在网络活动停止时消失
- 不允许用户交互
当您的应用访问网络超过几秒钟时,显示网络活动指示器以提供反馈。如果操作完成得更快,您不需要显示网络活动指示器,因为指示器很可能在用户注意到其存在之前消失。
—— iOS 人机界面指南
这是对Apple的networkActivityIndicatorVisible:
API的错误的一个很好的介绍
iPhone开发者应使用iPhone状态栏中的小网络活动指示器来通知用户应用程序访问网络。显示或隐藏指示器很简单
UIApplication.sharedApplication().networkActivityIndicatorVisible = true
大多数可能从他们的视图控制器中调用这个方法。这没问题,直到你必须处理多个并发任务,这些任务访问网络,以及或多个活跃的视图控制器。例如,你可能正在后台运行一个HTTP请求下载来自webservice的数据,并且使用一个
MKMapView
实例,当用户移动地图到新位置时它将访问网络。在这些情况下,如果你直接从这些方法中访问
networkActivityIndicatorVisible
属性,很可能在第一个任务完成后隐藏了指示器,尽管你的应用程序仍在访问网络。你需要实现一个计数器来记住网络活动指示器显示和隐藏的次数,以便正确管理它。如果你的代码分散在多个视图控制器中,这将变得更加繁琐。尽管这个“问题”仅仅是可用性的一个小方面,但解决方案非常简单且优雅,我认为即使你的应用程序中没有处理多个并发网络活动任务,这也值得去做。
NetworkActivityIndicator.sharedIndicator.visible = true
NetworkActivityIndicator.sharedIndicator.visible = false
NetworkActivityIndicator.sharedIndicator.visible = true
// Network activity indicator starts showing, activity count = 1
NetworkActivityIndicator.sharedIndicator.visible = true
NetworkActivityIndicator.sharedIndicator.visible = true
// Activity count = 3
NetworkActivityIndicator.sharedIndicator.visible = false
// Network activity indicator still showing, activity count = 2
NetworkActivityIndicator.sharedIndicator.visible = false
NetworkActivityIndicator.sharedIndicator.visible = false
// Network activity indicator hides, activity count = 0
NetworkActivityIndicator可通过CocoaPods获取。要安装它,只需将以下行添加到你的Podfile文件中:
pod 'NetworkActivityIndicator'
NetworkActivityIndicator采用MIT许可证。有关更多信息,请参阅LICENSE文件。
Elvis Nuñez,@3lvis