我一直在搜索 SO 并找到了一些相关的帖子,但没有一个(还)解决了我的问题。
我的情节提要中有一个视图设置,通过一个 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];
}
它曾经很好用,但无论如何......我们都知道这在 Autolayout 中不再适用了。所以我将其更改为以下内容:
-(void)animateButton:(UIView *)myView {
[UIView animateWithDuration:8.0f animations:^{
_viewConstA.constant = 45.0;
[myView layoutIfNeeded];
}];
}
当动作发生时,它不是从故事板中设置的初始位置开始,而是从左上角的 1x1 像素视图开始,并向下动画到它的最终静止位置(而不是像我一样向上移动 15 个像素打算)。
现在,如果我取出[myView layoutIfNeeded]; 部分,该动作将视图定位在正确的位置......但它没有在那里设置动画。它只是在视图出现时立即出现。
第一个屏幕抓取是初始位置。第二次抓取应该是意见的最后休息地。第三是从错误的位置和方向动画的视图。
想法/评论?我到底做错了什么?我认为这很容易......我必须遗漏一些明显的东西。