【问题标题】:How to programmatically 'load' things in iphone app?如何以编程方式在 iphone 应用程序中“加载”东西?
【发布时间】:2012-05-14 08:46:52
【问题描述】:

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

【问题讨论】:

    标签: objective-c ios initialization progress-bar


    【解决方案1】:

    您可以显示加载屏幕。 您可以使用不同的线程和分离线程。 或者,您可以使用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
    }
    

    还要检查是否绘制到屏幕尝试:

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

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

    【讨论】:

    • 这很有帮助,我想我会采用测试的方法来查看是否所有子视图都已初始化。谢谢!
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 假设我显示了一个加载屏幕,我如何知道所有内容何时加载完毕,以便停止显示该屏幕?
    • @Fitzy - 问题已解决或仍有疑问?
    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    相关资源
    最近更新 更多