我有以下viewDidLoad
方法:
- (void)viewDidLoad {
NSLog(@"didLoad");
if (self.loginField.text.length > 0) [self.passwordField becomeFirstResponder];
else [self.loginField becomeFirstResponder];
}
我还在viewWillAppear
和viewDidAppear
添加了日志时间。
在推送动画需要很长时间的某些情况下。我用评论(和没有)if-else行来测量时间(参见:时间如下所示)。我不知道在viewWillAppear
和viewDidAppear
来电之间什么会降低我的应用速度。
我试图用Time Profiler(仪器)分析这段代码,但它没有显示任何内容。我不知道该怎么办,更快地展示我的观点。有什么想法吗?
使用becomeFirstResponder,首先调用
2014-07-11 16:51:41.090 didLoad
2014-07-11 16:51:41.133 willAppear
2014-07-11 16:51:44.223 did appear
diffAppear = 3090ms
使用becomeFirstResponder,第二次调用
2014-07-11 16:52:01.370 didLoad
2014-07-11 16:52:01.400 willAppear
2014-07-11 16:52:02.109 did appear
diffAppear = 709ms
如果没有yesFirstResponder,请先致电
2014-07-11 16:57:21.720 didLoad
2014-07-11 16:57:21.754 willAppear
2014-07-11 16:57:22.420 did appear
diffAppear = 666ms
没有becomeFirstResponder,第二次调用
2014-07-11 16:57:31.851 didLoad
2014-07-11 16:57:31.870 willAppear
2014-07-11 16:57:32.541 did appear
diffAppear = 671ms
答案 0 :(得分:0)
作为@holex metion的评论:
-becomeFirstResponser通常会加载输入视图 需要时间的实际对象。另一方面,你应该打电话 在您的视图位于导航堆栈和之后的此方法 视图层次结构正确,这意味着在这种情况下:在...之内或之后 -viewDidAppear:方法,不早。
我已将–becomeFirstResponser
移至-viewDidAppear:
。现在根据这个question我添加了这些观察者,如下所示,现在应用它应该。
- (void)willShowKeyboard:(NSNotification *)notification {
[UIView setAnimationsEnabled:NO];
}
- (void)didShowKeyboard:(NSNotification *)notification {
[UIView setAnimationsEnabled:YES];
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willShowKeyboard:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didShowKeyboard:) name:UIKeyboardDidShowNotification object:nil];
这不是一个完美的解决方案(推动动画没有键盘)但对我来说已经足够了。