取消隐藏工具栏在后台队列上不起作用?



我想让底部工具栏在滚动视图停止滚动时消失,这是没有问题的:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
                       self.toolbar.hidden = NO;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
                       self.toolbar.hidden = NO;
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
                       self.toolbar.hidden = NO;
}

所以这工作得很好,但这种方法的问题是底部栏的外观闪烁,就像它有癫痫发作一样。我不希望这样,所以在它再次出现之前,我让它休眠一秒钟。问题是self.toolbar.hidden在后台线程中没有响应:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   ^{
                       NSLog(@"Hello?");
                       sleep(1);
                       self.toolbar.hidden = NO;
                   });
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   ^{
                       NSLog(@"Hello?");
                       sleep(1);
                       self.toolbar.hidden = NO;
                   });
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   ^{
                       NSLog(@"Hello?");
                       sleep(1);
                       self.toolbar.hidden = NO;
                   });
}

所以在这种情况下,self.toolbar.hidden = NO;什么都不做。nslog没有任何问题,所以我想我应该尝试这种方法,但它也不起作用:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   ^{
                       NSLog(@"Hello?");
                       sleep(1);
                       [self unhideToolbar];
                   });
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   ^{
                       NSLog(@"Hello?");
                       sleep(1);
                       [self unhideToolbar];
                   });
}
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   ^{
                       NSLog(@"Hello?");
                       sleep(1);
                       [self unhideToolbar];
                   });
}
-(void)unhideToolbar
{
    NSLog(@"toolbar unhidden");
    self.toolbar.hidden = NO;
}

我不知道我做错了什么…所有的nlog都可以正常工作,但是取消隐藏工具栏不需要Async函数。

有人知道为什么会这样吗?

UI更改必须在主队列上。试着像这样分派回给它:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
                   ^{
                       NSLog(@"Hello?");
                       sleep(1);
                       dispatch_async(dispatch_get_main_queue(), ^{
                           [self unhideToolbar];
                       });
                   });

最新更新