当用户按下中心UITabBarItem
时,我会显示一个模态UIView
。想起来就像Instagram。
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
if(viewController == [self.viewControllers objectAtIndex:2])
{
CameraViewController *cameraVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"cameraVC"];
UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:cameraVC];
navController.navigationBar.barStyle = UIStatusBarStyleLightContent;
[self presentViewController:navController animated:YES completion:nil];
return NO;
}
else
{
return YES;
}
}
这很完美。
当我在CameraViewController中完成拍照后,我希望视图被关闭,并为图片的结果选择第4个
UITabBarItem
(HistoryViewController)。这是我在CameraViewController(被强制推送的人)中执行的操作:
[self dismissViewControllerAnimated:YES completion:nil];
[(UITabBarController *)self.presentingViewController setSelectedIndex:3];
这就是越野车的地方。
如您所见,第4个标签中的文本已选中,但第一个标签图标仍处于选中状态。所显示的视图也是第一个选项卡中的视图。
大约10秒钟后,它最终将视图更改为正确的第4个标签。
我试图找出是什么进程导致了这种速度下降,所以我设置了很多NSLog。
大约10秒钟的减速时间介于CameraViewController的
[(UITabBarController *)self.presentingViewController setSelectedIndex:3];
和HistoryViewController的viewDidLoad
之间。这些调用/方法之间发生了什么,可能会导致速度变慢?
编辑:
在CameraViewController中:
- (void)scan {
dispatch_queue_t scanTesseract = dispatch_queue_create("scanTesseract", NULL);
dispatch_async(scanTesseract, ^(void) {
dispatch_async(dispatch_get_main_queue(), ^{
[SVProgressHUD setForegroundColor:[UIColor ht_mintDarkColor]];
[SVProgressHUD showProgress:0 status:@"Scanning"];
});
//background processing goes here
[self.tesseract setImage:self.imgToScan.blackAndWhite];
[self.tesseract recognize];
[self filterResults:[self.tesseract recognizedText]];
dispatch_async(dispatch_get_main_queue(), ^{
[SVProgressHUD dismiss];
});
[self scanningDone];
});
}
- (void)scanningDone {
[LastScan getInstance].hasBeenViewed = FALSE;
[self dismissViewControllerAnimated:YES completion:nil];
[(UITabBarController *)self.presentingViewController setSelectedIndex:3];
}
在HistoryViewController中:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"ViewDidLoad");
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
self.collectionView.backgroundColor = [UIColor whiteColor];
}
最佳答案
您正在从后台队列中调用“scanningDone”。在主队列上执行该方法。
dispatch_async(dispatch_get_main_queue(), ^{
[self scanningDone];
});
关于ios - UITabBarController setSelectedIndex性能降低,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27900813/