我有AViewController
并希望将BViewController
推送到导航堆栈,但BViewController
有很多用户界面,需要两秒钟才能呈现。
是否可以在推送之前预先渲染BViewController
的UI,以便立即显示?
答案 0 :(得分:1)
任何用户界面都不需要2秒钟才能推送,所以你确实遇到了问题。
您有不同的解决方案:
通过这种方式,您的用户可以知道发生了什么,如果他愿意,他可以决定回去,或者等待2秒钟。
如果在用户推送时加载数据确实是强制性的,您可以在推送控制器之前加载它。但这实际上取决于它是什么类型的数据。如果是元素的详细视图,则无法加载所有元素以防万一。如果它的视图始终相同,则可以在AViewController
完成加载时加载它,这将为您提供加载所需的时间,因为用户可能会在推送{{{}之前停留一两秒1}}。可能不建议使用此方法。你可以大致这样做:
BViewController
但是真的没有选择2,在很多情况下预加载UI很可能很糟糕。预加载数据很常见,但UI,我不这么认为。
我强烈建议您尝试选项3 强文,确保所有内容都很小并且正是您需要的。如果是,那么选择选项1 。
不要忘记:用户知道他想要什么,你不知道。如果他不想等待两秒钟,他应该可以在它旋转的时候回去。他永远不应该被迫等待两秒钟,你的应用程序永远不应该挂起。编辑:你说你需要加载"很多UI"。你能告诉我们/确切地说UI需要两秒钟加载吗?我有非常复杂的观点(我的意思是非常复杂),UI从来没有花费那么长时间来加载。
答案 1 :(得分:0)
在后台线程中的bViewController
中加载你的东西。
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
//Background Thread
// Do your loading stuff here
dispatch_async(dispatch_get_main_queue(), ^(void){
//Run your UI Updates
});
});
}