我有一个NSButton,它的底部与它的超级视图齐平,我想动画它向上移动,使它的顶部与它的超级视图齐平。
WWDC 2012会议228:掌握自动布局的最佳实践提到了两种动画布局变化的方法(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的常量。
答案 0 :(得分:7)
添加button.superview.wantsLayer = YES
后,上面的示例动画效果正确。