我在 Stack Overflow 上搜索了一些相关的帖子,但没有一个解决我的问题。 我在故事板中设置了一个视图,并通过 IBOulet 连接了一个约束。 在某个动作发生时,该视图应向上移动(或向下移动到其初始位置)。 但是,我无论如何都无法使它正常工作。 在自动布局之前,我运行了以下代码:
- (void)animateStarBackground:(NSString *)animationID
finished:(NSNumber *)finished
context:(void *)context
myView:(UIView *)myView
xPos:(float)xPos
yPos:(float)yPos {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.2];
[UIView setAnimationDelay:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
myView.center = CGPointMake(xPos, yPos);
[UIView commitAnimations];
以前它表现不错,但是...我们都知道这在自动布局中不起作用了。所以我将其更改为以下内容:
-(void)animateButton:(UIView *)myView {
[UIView animateWithDuration:8.0f animations:^{
_viewConstA.constant = 45.0;
[myView layoutIfNeeded];
}];
当动作发生时,视图不会像在Storyboard中设置的那样从初始位置开始,而是以1x1像素视图的形式从左上角开始动画向下移动到最终位置(而不是向上移动15像素,这是我原本想要的效果)。
现在,如果我删除部分,动作将把视图定位在完全正确的位置...但它不会以动画方式出现。它只是突然出现在视图中。
第一张截图是初始位置。 第二个截图是视图应该停留的位置。 第三个是视图从错误的位置和方向动画。
你有什么想法/评论?我到底做错了什么?我以为这很容易...我肯定漏掉了一些显而易见的东西。
viewDidLoad
中执行时,它出现问题,但是当我推迟到viewDidAppear
时,它正常工作。 - RobviewDidAppear
(或更晚)中执行基于块的约束动画(包括对layoutIfNeeded
的调用)对我来说运行良好,尽管当我在viewDidLoad
中执行时,我看到了你所描述的行为。 - Rob