6

NSButtonの底面がスーパービューの面と同じ面になるようにNSButtonを配置していて、その上端がスーパービューと面一になるようにアニメーションしたいと思います。定数を調整するのではなく、NSLayoutConstraintsを追加および削除してアニメーションを作成する

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の定数をその分だけ調整することの距離を判断するのが簡単です。

答えて

7

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