我有一个奇怪的问题,使用presentViewController作为库的一部分。
使用该库的代码调用此方法。从调用presentViewController到运行完成块最多需要12秒。但并非所有时间通常几乎都是瞬间的。
然而,如果我触摸屏幕上的任何位置,当它“滞后”时,它会立即触发。
-(void) advancedMenuWithPresentingViewController
:(UIViewController *)presentingViewController
animated:(BOOL)animated
onClose:(void (^)(void))onClose
onPrint:(void (^)(NSString *, NSString *))onPrint{
AdvancedMenuViewController *amc = [[AdvancedMenuViewController alloc] init];
AdvancedMenuViewController * __weak weakAmc = amc;
[amc setOnClose:^(void)
{
[weakAmc dismissViewControllerAnimated:animated completion:^{
onClose();
}];
}];
[amc setOnPrint:onPrint];
//Time from here
[presentingViewController presentViewController:amc
animated:animated
completion:^{
//To here
}];
}
调用viewDidLoad和viewWillAppear没有任何延迟,然后在调用viewDidAppear之前有一个很长的延迟(除非你触摸屏幕)。
这些方法中没有任何内容会降低它的速度。因为它通常正常。
如果有人能够对这个问题有所了解,我将非常感激,最令人困惑的部分是,如果您在触发advancedMenuWithPresentingViewController后与屏幕进行交互,它将立即发生。
答案 0 :(得分:16)
更换
[presentingViewController presentViewController:amc
animated:animated
completion:^{
//To here
}];
带
dispatch_async(dispatch_get_main_queue(), ^{
[presentingViewController presentViewController:amc
animated:animated
completion:^{
//To here
}];
});
解决了这个问题。
感谢rmaddys的建议。
答案 1 :(得分:1)
使用时间分析器在乐器中运行应用。 这至少应该告诉你是否有一些缓慢的绘图代码或者UIKit中的某些内容是否会减慢它。