理解iOS UIView动画块和dispatch_async(dispatch_get_main_queue)块

4

我希望能更好地理解这个主题。假设我想要做一些像以下示例中那样的非常酷的动画:

- (void)coolAnimation 
{
    [UIView animateWithDuration: some duration                     animations:^{ some animation }];
}

既然是一个动画块,那么它会自动添加到主队列吗?或者为了最佳实践,我应该像以下示例一样始终将UI更新添加到主队列中。

dispatch_async(dispatch_get_main_queue(), ^{
    [self coolAnimation];
});
2个回答

16
无论您在何处调用 [UIView animateWithDuration:animations:],您块的内容都会在主线程上执行。最好让操作系统运行您的动画;动画线程不会阻塞主线程,只有动画块本身会被阻塞。
在非常高层次的手势视图中,[UIView animateWithDuration:animations:] 评估您的块并确定其中每个可动画值的函数。操作系统具有一个用作帧定时器的动画线程,然后在每个时刻它会向主线程发送更新以及它们正在进展的值的可动画属性。 (您可以在 presentationLayer 上检查这些值的当前状态。)

4
你所传递的动画块会被立即执行,无需使用任何队列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接