我有一个带有动画的自动布局设置,它改变了 NSLayoutContraint 常量值
// set the slide in view's initial height to zero
self.adViewHeightConstraint = [NSLayoutConstraint constraintWithItem:self.adContainerView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:0.0];
[self.view addConstraint:self.adViewHeightConstraint];
// later, set the slid in view's height to non-zero
double delayInSeconds = 3.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
self.adViewHeightConstraint.constant = 100;
[UIView animateWithDuration:2.5 animations:^{
[self.view layoutIfNeeded];
}];
});
这正确地动画了我拥有的视图的大小,因此可以正常工作。然而,我看到的问题是,在 2.5 秒动画的持续时间内,我拥有的一些自定义图层支持的视图没有被重绘。
我看到的行为是要求自定义图层支持的视图在动画开始时绘制最终位置,然后应用变换在动画期间拉伸视图,直到最终看起来正确。
这 4 个镜头显示的是红色条动画向上,然后两个蓝色视图的高度各缩小以适应尺寸减小。该层知道如何为每个边界更改正确绘制自己,但动画并没有要求它在动画的每一步重绘......只是在开始时。这就是为什么黑色圆圈看起来像一个椭圆形的原因——它与图像#4 相同的两半,但被拉伸了。
自定义CAlayer
子类有一个被覆盖的方法:drawInContext:
,并且图层已needsDisplayOnBoundsChange
设置为YES
。
因此,问题仍然存在......我如何告诉这个动画NSLayoutConstraints
让视图在整个动画期间重绘?