viewWillAppear和viewDidAppear之间存在滞后

时间:2013-11-20 04:33:16

标签: ios objective-c

我有一个奇怪的问题,使用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后与屏幕进行交互,它将立即发生。

2 个答案:

答案 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中的某些内容是否会减慢它。