当用户按下中心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];
}
答案 0 :(得分:1)
您正在后台队列中调用您的scanDone。在主队列上执行该方法。
dispatch_async(dispatch_get_main_queue(), ^{
[self scanningDone];
});
答案 1 :(得分:0)
这个怎么样?
[self dismissViewControllerAnimated:YES completion:^{
[(UITabBarController *)self.presentingViewController setSelectedIndex:3];
}];