1

を使用して Mac アプリで制約の変更をアニメーション化しようとしていますが、ブロックNSAnimationContext runAnimationGroup...内に埋め込んだ場合にのみアニメーションが正常に機能します。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:^{
    }];
});

私は何を間違っていますか?前もって感謝します!

4

1 に答える 1

0

Dispatch_after は、メイン キューでブロックを実行します。おそらく、それがなければ、メイン スレッドではなくアニメーションを実行しようとしました。

また、dispatch_afterをdispatch_asyncに置き換えると、アニメーションが機能するかどうかを確認できます

于 2016-03-08T14:24:56.677 に答える