使用NSAnimationContext动画自动布局仅在dispatch_after块内部起作用

时间:2016-03-07 14:28:17

标签: objective-c cocoa autolayout nsanimationcontext

我正在尝试使用NSAnimationContext runAnimationGroup...在Mac应用中为约束更改制作动画,但动画只有在我将其嵌入dispatch_after块内时才能正常工作。

结果我有这段代码:

__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    [weakSelf layoutSubtreeIfNeeded];
    [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
        __strong typeof(weakSelf) strongSelf = weakSelf;
        context.duration = animated ? 0.3 : 0.;
        context.allowsImplicitAnimation = YES;
        strongSelf.expanded = NO;
        strongSelf.collapsingConstraint.priority = 900;
        [strongSelf layoutSubtreeIfNeeded];
    } completionHandler:^{
    }];
});

我做错了什么? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

Dispatch_after将在主队列上执行该块。 可能,没有它,你试图不在主线程上做动画。

如果用dispatch_async

替换dispatch_after,也可以检查动画是否有效