如何检查NSLayoutConstraint是否为动画

时间:2013-12-09 10:07:12

标签: ios objective-c cocoa-touch core-animation nslayoutconstraint

我正在创建一个自定义的NSLayoutConstraint子类,我需要知道布局约束的constant属性当前是否为内部状态处理动画。换句话说,我需要区分:

{ //no animation
    myLayoutConstraint.constant = 100;
} 

{ //animated
    myLayoutConstraint.constant = 100;
    [UIView animateWithDuration:0.2 animations:^{
        [self.myViewThatHasTheConstraintAttached layoutIfNeeded];

    } completion:^(BOOL finished) {
        [...]
    }];
}

这样我就可以处理在动画中间接收消息的角落案例。这可能吗?

1 个答案:

答案 0 :(得分:1)

这样做的唯一方法是在你想要访问它的地方设置一个布尔值并执行类似的操作......

{ //no animation
    theView.animatingChange = NO;
    myLayoutConstraint.constant = 100;
}

{ //animated
    theView.animatingChange = YES;
    myLayoutConstraint.constant = 100;
    [UIView animateWithDuration:0.2 animations:^{
        [self.myViewThatHasTheConstraintAttached layoutIfNeeded];

    } completion:^(BOOL finished) {
        [...]
        theView.animatingChange = NO;
    }];
}

视图上的属性会立即更改为动画的“结束”值。在动画时,它不会更改为所有中间值。只是屏幕上的绘图是动画的。