6

Ho un NSButton il cui fondo è a filo con il suo superview, e mi piacerebbe animarlo spostandolo verso l'alto in modo che la sua parte superiore sia a filo con il suo superview.Animando aggiungendo e rimuovendo NSLayoutConstraints, invece di regolare le costanti

WWDC 2012 Sessione 228: Le migliori pratiche per la gestione del layout automatico menziona due modi per animare le modifiche al layout (31:16) e sto tentando di utilizzare la tecnica CoreAnimation. L'esempio seguente sposta correttamente NSButton, ma lo fa istantaneamente e senza animazione.

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

Posso aggiungere & rimuovere NSLayoutConstraints e lasciare Core Animation capire come animare il cambiamento? Sembra più semplice di me determinare la distanza tra la vecchia posizione del pulsante &, quindi regolare la costante di NSLayoutConstraint di quella quantità.

risposta

7

Dopo aver aggiunto button.superview.wantsLayer = YES, l'esempio precedente viene animato correttamente.

Problemi correlati