我想让底部工具栏在滚动视图停止滚动时消失,这是没有问题的:
-(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];
});
});