Dre*_*rew 3 uiview uiviewanimation ios autolayout
我一直在寻找SO并找到了一些相关的帖子,但没有一个(还)解决了我的问题.
我的故事板中有一个视图设置,通过IBOulet连接约束.在某个动作后,视图应向上移动(或向下移动到其初始位置).对于我的生活,我无法让它正常工作.在autolayout之前,我运行了这段代码:
- (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];
Run Code Online (Sandbox Code Playgroud)
}
它过去工作得很好,但无论如何......我们都知道这在Autolayout中不起作用了.所以我把它改成了以下内容:
-(void)animateButton:(UIView *)myView {
[UIView animateWithDuration:8.0f animations:^{
_viewConstA.constant = 45.0;
[myView layoutIfNeeded];
}];
Run Code Online (Sandbox Code Playgroud)
}
当动作发生时,它不是从故事板中设置的初始位置开始,而是从左上角的1x1像素视图开始,向下动画到它最后的休息位置(而不是像我一样向上移动15像素)打算它).
现在,如果我取出[myView layoutIfNeeded]; 部分,动作将视图定位在恰当的位置......但它不会在那里制作动画.当视图出现时,它就在那里.
第一个屏幕抓取是初始位置.第二次抓住应该是最后休息的地方.第三是从错误的点和方向动画的视图.
想法/评论?我到底做错了什么?我以为这会很容易......我必须错过一些明显的东西.



当我从中调用以下基于块的动画时viewDidLoad,它会将帧从CGRectZero最终位置设置为动画.但是,如果我从中调用它viewDidAppear,它就像预期的那样工作.
- (void)animateMovementByConstraint
{
[UIView animateWithDuration:0.5
animations:^{
self.topLayoutConstraint.constant = 100;
[self.view layoutIfNeeded];
}];
}
Run Code Online (Sandbox Code Playgroud)
(在这个例子中,我topLayoutConstraint是IBOutlet在Interface Builder中为我想要设置动画的控件的顶部垂直约束定义的.)
有了自动布局,自从我开始启动动画后viewDidAppear,我没有遇到任何问题.
| 归档时间: |
|
| 查看次数: |
4065 次 |
| 最近记录: |