对于非自动布局故事板/NIB,您的代码很好。顺便说一句,现在通常建议您使用blocks制作动画:
[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)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
,只需control在助手编辑器中从约束 -drag 到您的 .h :
顺便说一句,如果您正在为约束设置动画,请注意您可能已链接到该图像视图的任何其他约束。通常,如果您将某些东西放在图像的正下方,它的约束将链接到图像,因此您可能必须确保没有任何其他对图像有约束的控件(除非您也希望它们移动) .
您可以通过打开故事板或NIB然后选择“文件检查器”(最右侧面板上的第一个选项卡,或者您可以通过按option+ command+ 1(数字“1”)将其拉起来判断您是否使用自动布局):
请记住,如果您计划支持 iOS 6 之前的版本,请确保关闭“自动布局”。自动布局是 iOS 6 的一项功能,不适用于早期版本的 iOS。