最近在做项目,用到了presentViewController:animated:completion方法。刚开始在模拟器上跳转有延迟,如果连续点击两次就可以跳转。然后用真机测试发现又没这种问题,所以我就当做是模拟器有问题了。
但是今天我在手机上点击跳转却发现出现了延迟,大概三四秒才跳转。而且如果在延迟没跳转的时候你再点击屏幕,就会跳转。对于这种情况我就感觉是代码问题了。
首先打印了当前线程是主线程,测试了几次,感觉不是控制器的原因。打印输出都没问题,但就是不跳转,没办法。我就异步开启主线程执行跳转:
EXMSettingsController *settingsController = [[EXMSettingsController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:settingsController];
settingsController.view.backgroundColor = [UIColor colorWithHexString:@"#F0F0F0"];
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf presentViewController:navController animated:YES completion:nil];
});
这样好像挺好使,先这么用着吧。
后面网上查了下,主动唤起主线程再执行跳转也可以:
[self performSelectorOnMainThread:@selector(presentViewController) withObject:nil waitUntilDone:NO];
然后在presentViewController方法中执行跳转代码。
目前就知道这样解决可行,但是引起这个问题的原因就不得而知了。
如果有知道的欢迎留言补充,谢谢!