如何在启动时冻结UI?

时间:2011-12-25 02:35:49

标签: iphone uiview

当应用程序启动时,我想冻结UI一秒左右,以获得初始化的预处理服务(例如 - 位置服务)。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

只需在整个屏幕上放置一个透明的UIView,并拦截所有触摸事件。

要拦截触摸事件,只需子类化UIView并覆盖

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

通常在该方法中你会调用super,但在这种情况下你只需返回YES:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    return YES;
}

如果您想真正喜欢,可以将合成属性添加到名为shouldInterceptTouches的UIView子类中,并执行以下操作:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
 {
     return shouldInterceptTouches ? YES : [super pointInside:point withEvent:event];
 }

另请注意确保透明视图位于其他视图之上。

旁注:当你做那样的事情时,Apple的人机界面指南不喜欢它。如果您的应用程序没有响应,用户将会感到困惑和失望,如果他们认为应用程序被冻结,可能会导致他们退出应用程序。你最好显示某种UIActivityIndi​​catorView并且只禁用绝对必要的按钮。当你在后台做同样的事情时,Apple喜欢它,并允许用户做其他事情,以防万一需要一段时间或失败。

答案 1 :(得分:-1)

您可以使用模态视图或禁用所有组件,直到位置服务完成。

这是应用程序的责任,而不是操作系统或框架。