当应用程序启动时,我想冻结UI一秒左右,以获得初始化的预处理服务(例如 - 位置服务)。有没有办法做到这一点?
答案 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的人机界面指南不喜欢它。如果您的应用程序没有响应,用户将会感到困惑和失望,如果他们认为应用程序被冻结,可能会导致他们退出应用程序。你最好显示某种UIActivityIndicatorView并且只禁用绝对必要的按钮。当你在后台做同样的事情时,Apple喜欢它,并允许用户做其他事情,以防万一需要一段时间或失败。
答案 1 :(得分:-1)
您可以使用模态视图或禁用所有组件,直到位置服务完成。
这是应用程序的责任,而不是操作系统或框架。