Ios UIView动画未按预期工作

Ios UIView动画未按预期工作,ios,uiimageview,uiviewanimation,Ios,Uiimageview,Uiviewanimation,我有两个UIImageView填充视图控制器,第一个填充上半部分,第二个填充下半部分。我直接在故事板文件中设置它们 在viewDidLoad方法中,我正在设置代码,以便为两个UIImageView执行动画,使其看起来像一个打开的篮子。第一个UIImageView移动到顶部,直到脱离视图,第二个UIImageView移动到视图底部,直到脱离视图 这是我目前的代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additi

我有两个UIImageView填充视图控制器,第一个填充上半部分,第二个填充下半部分。我直接在故事板文件中设置它们

在viewDidLoad方法中,我正在设置代码,以便为两个UIImageView执行动画,使其看起来像一个打开的篮子。第一个UIImageView移动到顶部,直到脱离视图,第二个UIImageView移动到视图底部,直到脱离视图

这是我目前的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    CGRect basketTopFrame = self.basketTop.frame;
    basketTopFrame.origin.y = -basketTopFrame.size.height;

    CGRect basketBottomFrame = self.basketBottom.frame;
    basketBottomFrame.origin.y = self.view.bounds.size.height;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:1.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    self.basketTop.frame = basketTopFrame;
    self.basketBottom.frame = basketBottomFrame;

    [UIView commitAnimations];

}
但行为与我预期的不同,顶部帧没有移动,底部帧从左上角到底部原点位置设置动画,并且没有移出视图

这是我在情节提要中设置的UIImageViews位置:

这是我启动应用程序时的UIImageViews:

这是应用程序完成animationviewDidLoad时的UIImageView:


请注意,这段代码在Xcode 4.2中有效,但自从升级到Xcode 4.5并使用情节提要之后,我开始遇到这个问题。Thanx。您可以在故事板上启用自动布局。在这种情况下,视图组件在viewDidLoad处没有有效的帧值,因此代码无法工作

通过在情节提要中选择文件检查器并取消选中“使用自动布局”,可以禁用自动布局


在任何情况下,这都是启动动画的错误方法。尝试将代码移动到ViewDidDisplay

您可能在故事板上启用了自动布局。在这种情况下,视图组件在viewDidLoad处没有有效的帧值,因此代码无法工作

通过在情节提要中选择文件检查器并取消选中“使用自动布局”,可以禁用自动布局


在任何情况下,这都是启动动画的错误方法。尝试将代码移动到ViewDidDisplay

关闭自动布局后,如果您的目标是IOS 4及更高版本,苹果建议使用基于块的UIView动画,因为它简化了过程,您可以在一行中完成操作。请查看更多信息

在您的情况下,无论您是否计划在ViewDidLoad/ViewWillDisplay中制作动画,都可以使用基于块的动画通过以下方式完成:

CGRect basketTopFrame = self.boxTop.frame;
CGRect basketBottomFrame = self.boxBottom.frame;

[UIView animateWithDuration: 0.5 delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{
    [self.boxTop setFrame:CGRectMake(basketTopFrame.origin.x, -basketTopFrame.size.height, basketTopFrame.size.width, basketTopFrame.size.height)];

    [self.boxBottom setFrame:CGRectMake(basketBottomFrame.origin.x, self.view.bounds.size.height, basketBottomFrame.size.width, basketBottomFrame.size.height)];

} completion:^(BOOL finished) {
    // TODO : Do any additional stuffs.
}];

一旦你关闭了AutoLayout,如果你的目标是IOS 4或更高版本,苹果公司推荐使用基于块的UIView动画,因为它简化了过程,你可以在一行中完成任务。请查看更多信息

在您的情况下,无论您是否计划在ViewDidLoad/ViewWillDisplay中制作动画,都可以使用基于块的动画通过以下方式完成:

CGRect basketTopFrame = self.boxTop.frame;
CGRect basketBottomFrame = self.boxBottom.frame;

[UIView animateWithDuration: 0.5 delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{
    [self.boxTop setFrame:CGRectMake(basketTopFrame.origin.x, -basketTopFrame.size.height, basketTopFrame.size.width, basketTopFrame.size.height)];

    [self.boxBottom setFrame:CGRectMake(basketBottomFrame.origin.x, self.view.bounds.size.height, basketBottomFrame.size.width, basketBottomFrame.size.height)];

} completion:^(BOOL finished) {
    // TODO : Do any additional stuffs.
}];