我有以下代码将我的UIView移到左边:
- (void)viewDidLoad {
[super viewDidLoad];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:4];
int xOriginal = 91;
CGRect rect = imagem.frame;
int x = rect.origin.x;
int y = rect.origin.y;
int w = rect.size.width;
int h = rect.size.height;
if(x == xOriginal){
imagem.frame = CGRectMake(x+100, y, w, h);
}else{
imagem.frame = CGRectMake(x-100, y, w, h);
}
[UIView commitAnimations];
}
我的视图坐标是x = 91(超级视图的中心),当我启动我的应用程序时,我的UIView向左开始并转到中心,而不是中心并向右转,为什么会发生这种情况?
如何让我的UIView从中心开始(x = 91)并向右(91 + 100)开始,而不是从左到中?
答案 0 :(得分:2)
[UIImageView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
imagem.frame=CGRectMake(imagem.frame.origin.x+100, imagem.frame.origin.y, imagem.frame.size.width, imagem.frame.size.height);
} completion:^(BOOL finished) {
//code for completion
NSLog(@"Animation complete");
}];
答案 1 :(得分:1)
Initially image.frame = CGRectMake(91,100,20,20);
So imageview starting point is 0
[UIView animateWithDuration:5.0
animations:^{
//Animation code goes here
image.frame = CGRectMake(191,100,20,20); //Now imageview moves from 0 to 100
} completion:^(BOOL finished) {
//Code to run once the animation is completed goes here
}];
答案 2 :(得分:1)
Autolayout和框架动画不是好朋友。尝试动画约束而不是直接框架。
您可以创建约束的出口,并在代码中设置约束的constant
属性以移动您的视图。
您还可以在动画块中调用-[view layoutIfNeeded]
来刷新约束。
否则,您可以删除所有视图约束并无畏地为其框架设置动画。
答案 3 :(得分:1)
正如另一张海报所说,您无法在使用AutoLayout的XIB /故事板中为视图框架制作动画。
相反,您必须为附加到视图的约束设置动画。
您要做的是创建约束(或多个约束)并将其连接到IBOutlet。然后,在动画代码中,计算约束的更改并更改适当约束的常量。
例如,如果要移动视图的垂直位置,请设置一个约束来设置视图的垂直位置,并将其链接到名为viewConstraint的IBOutlet。然后你就可以使用这样的代码了:
[myView animateWithDuration: .25
animations: ^
{
viewConstraint.constant -= shiftAmount;
[self.view layoutIfNeeded];
}
];