6

Ich habe einen NSButton, dessen Unterseite bündig mit seiner Superview ist, und ich möchte animieren es bewegt sich, so dass seine Oberseite bündig mit seiner Superview ist.Animieren durch Hinzufügen und Entfernen von NSLayoutConstraints, anstatt die Konstanten anzupassen

WWDC 2012 Sitzung 228: Best Practices für das Mastering Auto Layout erwähnt zwei Möglichkeiten, Layoutänderungen zu animieren (31:16), und ich versuche, die CoreAnimation-Technik zu verwenden. Im folgenden Beispiel wird der NSButton korrekt verschoben, jedoch sofort und ohne Animation.

[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] ; 

Kann ich hinzufügen & NSLayoutConstraints entfernen und lassen Coreanimation, herauszufinden, wie die Änderung zu animieren? Das scheint einfacher zu sein als ich, indem ich den Abstand zwischen der alten Position der Schaltfläche & festlege und dann die Konstante NSLayoutConstraint um diesen Betrag anpasse.

Antwort

7

Nach dem Hinzufügen von button.superview.wantsLayer = YES wird das obige Beispiel korrekt animiert.