Ios 取消隐藏工具栏不会';你不能在后台队列上工作吗?
当滚动视图停止滚动时,我希望底部工具栏消失,这没有问题:Ios 取消隐藏工具栏不会';你不能在后台队列上工作吗?,ios,objective-c,xcode,Ios,Objective C,Xcode,当滚动视图停止滚动时,我希望底部工具栏消失,这没有问题: -(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { self.toolbar.hidden = NO; } -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
-(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代码>什么也不做。NSLogs没有问题,所以我想尝试这种方法,但它也不起作用:
-(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;
}
我不知道我做错了什么。。。所有nslog都可以正常工作,但取消隐藏工具栏与异步函数无关
有人知道为什么会发生这种情况吗?UI更改必须在主队列上。请尝试按如下方式将服务器发送回:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),
^{
NSLog(@"Hello?");
sleep(1);
dispatch_async(dispatch_get_main_queue(), ^{
[self unhideToolbar];
});
});
应在主队列上实现更改UI