1

我有两个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我启动应用程序的时间:

在此处输入图像描述

这是UIImageViews应用程序完成动画的时间(viewDidLoad): 在此处输入图像描述

请注意,此代码在 Xcode 4.2 中有效,但自从升级到 Xcode 4.5 并使用 Storyboard 后,我开始遇到此问题。提前谢谢。

4

2 回答 2

6

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

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

无论如何,这是开始动画的错误方法。尝试将代码移动到 viewDidAppear。

于 2012-11-15T16:14:13.487 回答
0

一旦你关闭了“自动布局”,并且如果你的目标是 IOS 4 及之后的基于块的 UIView 动画,Apple 建议你这样做,因为它简化了流程,你可以在一行中完成。请查看UIView 参考以获取更多信息。

在您的情况下,无论您打算在 ViewDidLoad / ViewWillAppear 中制作动画,都可以使用基于块的动画通过以下方式完成:

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.
}];
于 2012-11-16T04:47:35.280 回答