当我对 UIImageView 和父 UIView 顶部之间的距离使用约束时,动画本身就可以工作,而没有垂直和水平居中。
UIImageView 的约束:
- 宽度:240
- 身高:128
- 顶部布局的顶部空间:200 --> 连接到 logoImageViewVerticalSpaceConstraint
当我使用它时,动画效果很好:
self.logoImageViewVerticalSpaceConstraint.constant = 20;
[UIView animateWithDuration: 1.0
delay: 0
options:(UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction)
animations:^{[self.logoImageView layoutIfNeeded];}
completion:^(BOOL finished) {NSLog(@"Finished animation"); }];
当我不想使用静态空间来顶部布局约束时,问题就会出现,因为图像视图需要居中以用于 3.5 和 4 英寸设备。为了解决这个问题,我想从垂直和水平中心约束开始。
- 宽度:240
- 身高:128
- 将中心 x 对齐到:superview --> 连接到 logoImageViewYCenterConstraint
- 将中心 y 对齐到:superview
现在我想我可以简单地删除 y 中心约束并自己将空间添加到 20pt 的顶部布局约束:
[self.logoImageView removeConstraint:self.logoImageViewYCenterConstraint];
NSLayoutConstraint *topSpaceConstraint = [NSLayoutConstraint
constraintWithItem:self.view attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual toItem:self.logoImageView
attribute:NSLayoutAttributeTop multiplier:1
constant:20];
[self.view addConstraint:topSpaceConstraint];
[UIView animateWithDuration: 1.0
delay: 0
options:(UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionAllowUserInteraction)
animations:^{
[self.logoImageView layoutIfNeeded];
}
completion:^(BOOL finished) {
NSLog(@"Finished animate");
}];
结果是 UIImageView 保持居中并且有点爆炸。这与我期望发生的完全相反,因为我删除了 x 中心约束。将距离为 20pt 的顶部约束添加到父 UIView 的顶部,我没有触及任何其他约束(如宽度和高度)。