0

在我的应用程序中,我注意到它在运行的前几秒钟运行缓慢,因为对象仍在初始化、绘制到屏幕等。我如何加载这些对象并创建一个栏来显示加载进度?

4

2 回答 2

2

“我如何加载这些对象”-根据您的需要可以有多种方式-

  1. 您可以使用并发线程来加载事物。

  2. 您可以进行延迟加载 - 首先加载需要在第一个屏幕上显示的内容(考虑到您正在加载一些在第一个屏幕上不需要的数据)。

  3. 您可以显示加载屏幕并让用户知道加载正在进行。

您可以使用UIActivityIndicatororUIProgressBar来显示当前正在加载。

于 2012-05-14T08:49:51.177 回答
2

您可以显示加载屏幕。您可以使用不同的线程和分离线程。或者,您可以使用UIActivityIndicatorVieworUIProgressBar来显示当前正在加载。

UIActivityIndicatorView基本上就像你启动你的mac。一个旋转的圆圈。 UIProgressBar是一个空条,随着负载的增加,它会被蓝色填充。

AUIProgressBar有一个变量调用progress,而你只是发送startAnimatingstopAnimating消息到UIActivityIndicator

要了解有关这两者的更多信息,请查看以下链接:

进度条 Apple 文档

进度条图像

活动指示器 Apple 文档

活动指标 GIF 图像

更新您对其他答案的问题:

你加载什么?您正在加载的类/对象是否有委托方法?如果你说

仍在初始化并绘制到屏幕上

考虑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)
}

这是很多东西!还有其他问题吗?

于 2012-05-14T08:56:01.713 回答