当应用程序启动时,我想冻结UI一秒左右,以获得一个预先条件服务(例如 - 位置服务)初始化。有没有办法做到这一点?如何在启动时冻结UI?
2
A
回答
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];
}
还记得确保您的透明视图高于其他视图。
附注:苹果的人机界面指南不喜欢它,当你做这样的事情。如果你的应用程序没有响应,用户会感到困惑和失望,如果他们认为应用程序被冻结,可能会导致他们退出应用程序。你最好显示某种UIActivityIndicatorView,并只禁用绝对必要的按钮。当你在后台做这样的事情时,苹果会喜欢它,并允许用户做其他事情,以防万一需要一段时间或失败。
-1
在位置服务完成之前,您可以使用模态视图或禁用所有组件。
这是应用程序的责任而不是操作系统或框架。
相关问题
- 1. Xcode 4.3在启动时冻结
- 2. intellij在启动tomcat OSX时冻结
- 3. Hubot在启动时挂起/冻结
- 4. Tomcat 6在启动时冻结
- 5. Xcode在启动时会冻结
- 6. Android模拟器在启动时冻结
- 7. Android Studio 2.2.3启动时冻结
- 8. 启动批处理流时C#冻结
- 9. 启动时TCP服务器冻结
- 10. AsyncTask冻结UI
- 11. QFileSystemModel冻结UI
- 12. NSFetchedResultsController冻结UI
- 13. 如何冻结第一列,同时水平滚动语义UI
- 14. JTable - UI在很多插入时冻结
- 15. DataGridView在加载大表时冻结UI
- 16. 在重建WPF UI时防止冻结?
- 17. 自定义MessageBox启动时应该如何冻结父线程?
- 18. 在AsyncTask期间UI冻结
- 19. Android Thread.sleep()在AsyncTask冻结UI
- 20. iCloud启用时首次启动iOS应用程序时冻结
- 21. iOS stringByEvaluatingJavaScriptFromString - UI冻结
- 22. webClient.DownloadStringTaskAsync()。Wait()冻结UI
- 23. 蟒蛇UI冻结
- 24. UI线程冻结
- 25. Java Swing - UI冻结
- 26. Android AsyncTask冻结UI
- 27. Task.Factory.Start新冻结UI
- 28. UISearchController使UI冻结
- 29. C#:Thread.Join()冻结UI
- 30. 当Windows XP中的UI线程冻结时System.Timers.Timer冻结
这似乎是非常好的解决方案。如何截取所有的触摸事件 - 独家触摸(YES)和setUserInteractionEnabled(NO)是否足够好?我使用了这两个设置,但仍然看到下面的视图在透明视图上滑动移动 – tom 2011-12-25 20:59:16
我已编辑帖子以添加更多详细信息。 – 2011-12-25 22:29:01
谢谢@Jack!现在的问题是如何确保我的观点高于其他观点?不会添加SubView保证? – tom 2011-12-25 22:55:28