2011-12-25 48 views
2

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

回答

3

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

要拦截的触摸事件,简单地继承一个UIView和覆盖

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

通常你会打电话就可以了超级这种方法里面,但在这种情况下,你将只返回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]; 
} 

还记得确保您的透明视图高于其他视图。

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

+0

这似乎是非常好的解决方案。如何截取所有的触摸事件 - 独家触摸(YES)和setUserInteractionEnabled(NO)是否足够好?我使用了这两个设置,但仍然看到下面的视图在透明视图上滑动移动 – tom 2011-12-25 20:59:16

+0

我已编辑帖子以添加更多详细信息。 – 2011-12-25 22:29:01

+0

谢谢@Jack!现在的问题是如何确保我的观点高于其他观点?不会添加SubView保证? – tom 2011-12-25 22:55:28

-1

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

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