6

下部がスーパービューと同じ高さの NSButton があり、上部がスーパービューと同じ高さになるようにアニメーション化して上に移動したいと考えています。

WWDC 2012 セッション 228: 自動レイアウトをマスターするためのベスト プラクティスでは、レイアウトの変更をアニメーション化する 2 つの方法 (31:16) について言及しており、CoreAnimation 手法を使用しようとしています。以下の例では、NSButton を正しく移動しますが、アニメーションなしで瞬時に移動します。

[button.superview removeConstraint:pointerToBottomSpaceConstraint] ;
NSArray* topSpaceConstraintArray = [NSLayoutConstraint constraintsWithVisualFormat: @"V:|[button]"
                                                                           options: 0
                                                                           metrics: nil
                                                                             views: NSDictionaryOfVariableBindings(button)] ;
[button.superview addConstraints:topSpaceConstraintArray] ;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext* context) {
    context.duration = 2 ;
    context.allowsImplicitAnimation = YES ;
    [button.superview layoutSubtreeIfNeeded] ;
} completionHandler:nil] ;

NSLayoutConstraints を追加および削除して、CoreAnimation に変更をアニメーション化する方法を理解させることはできますか? ボタンの古い位置と新しい位置の間の距離を決定し、その量だけ NSLayoutConstraint の定数を調整するよりも簡単に思えます。

4

1 に答える 1

7

を追加するbutton.superview.wantsLayer = YESと、上記の例は正しくアニメーション化されます。

于 2012-12-01T23:57:44.883 に答える