有没有办法手动阻止队列任务?我想在调度队列任务中使用UIView动画,但此任务只应在动画完成时完成。
dispatch_queue_t myCustomQueue;
myCustomQueue = dispatch_queue_create("com.example.MyCustomQueue", NULL);
dispatch_async(myCustomQueue, ^{
[UIView animateWithDuration:myDuration
delay:0.0f
options:0
animations:^{
// my changes here
}
completion:nil];
});
dispatch_async(myCustomQueue, ^{
// if the animation from the task below is still running, this task should wait until it is finished...
});
答案 0 :(得分:4)
使用dispatch_suspend
暂停您的队列,然后在动画完成块中恢复它(使用dispatch_resume
)。这将导致提交到队列的所有块在启动之前等待动画完成。请注意,暂停时已在该队列上运行的块将继续运行。
答案 1 :(得分:2)
答案 2 :(得分:1)
Swift 3中的问题
我使用以下代码在Swift 3的主线程上执行。动画有效,但时机已关闭:
// Animation works, timing is not right due to async
DispatchQueue.main.async {
// animation code
}
<强>解决方案强>
更新Sven对Swift 3的回答,我能够使用以下代码让我的动画正常运行:
DispatchQueue.main.suspend()
// animation code goes here.
DispatchQueue.main.resume()