当用户按下中心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/

10-12 03:40