如何在iphone应用程序中以编程方式“加载”内容?

时间:2012-05-14 08:46:52

标签: objective-c ios initialization progress-bar

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

2 个答案:

答案 0 :(得分:2)

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

  1. 您可以使用并发线程来加载东西。

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

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

  4. 您可以使用UIActivityIndicatorUIProgressBar来显示当前正在加载。

答案 1 :(得分:2)

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

UIActivityIndicatorView基本上就像你启动你的mac一样。一个旋转的圆圈。 UIProgressBar是一个空栏,随着载荷的增加而填满蓝色。

UIProgressBar有一个名为progress的变量,而您只需将startAnimatingstopAnimating条消息发送到UIActivityIndicator

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

Progress Bar Apple Documentation

Progress Bar Image

Activity Indicator Apple Documentation

Activity Indicator GIF Image

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

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

  

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

考虑以下object是您的一个对象 你可以说

if (object) {
// saying just 'object' asks if it is non-zero/valid
}

还要检查画面上的DRAWN是否尝试:

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

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