【发布时间】:2012-05-14 08:46:52
【问题描述】:
在我的应用程序中,我注意到它在运行的前几秒钟运行缓慢,因为对象仍在初始化、绘制到屏幕等。我如何加载这些对象并创建一个栏来显示进度装载量?
【问题讨论】:
标签: objective-c ios initialization progress-bar
在我的应用程序中,我注意到它在运行的前几秒钟运行缓慢,因为对象仍在初始化、绘制到屏幕等。我如何加载这些对象并创建一个栏来显示进度装载量?
【问题讨论】:
标签: objective-c ios initialization progress-bar
您可以显示加载屏幕。
您可以使用不同的线程和分离线程。
或者,您可以使用UIActivityIndicatorView 或UIProgressBar 来显示当前正在加载。
UIActivityIndicatorView 基本上就像你启动你的mac。一个旋转的圆圈。
UIProgressBar 是一个空条,随着负载的增加,它会被蓝色填充。
UIProgressBar 有一个名为 progress 的变量,而您只需将 startAnimating 和 stopAnimating 消息发送到 UIActivityIndicator
要了解有关这两者的更多信息,请查看以下链接:
Progress Bar Apple Documentation
Activity Indicator Apple Documentation
更新您对其他答案的问题:
你加载什么?您正在加载的类/对象是否有委托方法?如果你说
仍在初始化并绘制到屏幕上
考虑到下面的object 是您的对象之一
你可以说
if (object) {
// saying just 'object' asks if it is non-zero/valid
}
还要检查是否绘制到屏幕尝试:
if([self.view.subviews containsObject:object])
或
if([object superview] == self.view)
或方法
-(BOOL)isDescendantOfView:(UIView *)view;
返回值YES 如果接收者是视图的直接或远距离子视图,或者视图是接收者本身;否则NO。
另外:当我说self.view 时,它不一定是self,因为加载视图可能是不同的视图。您可以为该其他类创建一个对象并调用该类而不是self。喜欢:if([otherClass.object superview] == otherClass.view)
你也可以在另一个类中创建一个update 方法,这样你就可以说:
if([otherClass finishedLoading])
然后将其作为update 方法:
- (BOOL)finishedLoading {
return ([object superview] == self.view)
}
这是很多东西!还有其他问题吗?
【讨论】:
“我如何加载这些对象” - 根据您的需要可以有多种方式-
您可以使用并发线程来加载事物。
您可以进行延迟加载 - 首先加载需要在第一个屏幕上显示的内容(考虑到您正在加载几个不需要在第一个屏幕上显示的数据)。
您可以显示加载屏幕并让用户知道加载正在进行中。
您可以使用UIActivityIndicator 或UIProgressBar 来显示当前正在加载。
【讨论】: