Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 取消隐藏工具栏不会';你不能在后台队列上工作吗?_Ios_Objective C_Xcode - Fatal编程技术网

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