动画添加&删除NSLayoutConstraints,而不是调整常量

时间:2012-11-29 16:04:53

标签: core-animation osx-mountain-lion autolayout nslayoutconstraint

我有一个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的常量。

1 个答案:

答案 0 :(得分:7)

添加button.superview.wantsLayer = YES后,上面的示例动画效果正确。