animation图像视图向上滑动

我正在尝试使图像视图(下方的logo )向上滑动100像素。 我正在使用这个代码,但什么都没有发生:

 [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:3]; logo.center = CGPointMake(logo.center.x, logo.center.y - 100); [UIView commitAnimations]; 

这段代码在viewDidLoad方法中。 具体而言, logo.center = ...不起作用。 其他的东西(比如改变alpha)也可以。 也许我没有使用正确的代码向上滑动?

对于非自动布局的故事板/ NIB,你的代码是好的。 顺便说一下,现在通常build议您使用块生成animation:

 [UIView animateWithDuration:3.0 animations:^{ self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100.0); }]; 

或者,如果您想对选项等进行更多的控制,可以使用:

 [UIView animateWithDuration:3.0 delay:0.0 options:UIViewAnimationCurveEaseInOut animations:^{ self.logo.center = CGPointMake(self.logo.center.x, self.logo.center.y - 100); } completion:nil]; 

但是如果你不使用自动布局,你的代码应该可以工作。 只是上面的语法是iOS 4及更高版本的首选。

如果您使用自动布局,您(a)为您的垂直空间约束(见下文)创build一个IBOutlet ,然后(b)您可以执行如下操作:

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; static BOOL logoAlreadyMoved = NO; // or have an instance variable if (!logoAlreadyMoved) { logoAlreadyMoved = YES; // set this first, in case this method is called again self.imageVerticalSpaceConstraint.constant -= 100.0; [UIView animateWithDuration:3.0 animations:^{ [self.view layoutIfNeeded]; }]; } } 

要为约束添加IBOutlet ,只需在助手编辑器中将约束从约束控制到您的.h即可:

添加IBOutlet的垂直约束

顺便说一下,如果您正在为约束设置animation,请注意您可能链接到该图像视图的任何其他约束。 通常情况下,如果你把东西放在图像的下面,那么它就会有与图像相关的约束,所以你可能需要确保你没有任何其他的控件来限制你的图像(除非你想让它们移动) 。

您可以通过打开故事板或NIB来判断是否使用自动布局,然后select“文件检查器”(第一个选项卡在最右边的面板上,或者您可以通过按下选项 + 命令 + 1 (数字“ 1" )):

自动布局

请记住,如果您计划支持iOS 6以前版本,请确保closures“自动布局”。 Autolayout是iOS 6的一个function,不适用于早期版本的iOS。

你试试

 logo.frame = CGRectMake(logo.frame.origin.x, logo.frame.origin.y - 100,logo.frame.size.width,logo.frame.size.height)