8

我正在尝试使图像视图(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)可以。也许我没有使用正确的代码将其向上滑动?

4

2 回答 2

41

对于非自动布局故事板/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 :

为垂直约束添加 IBOutlet

顺便说一句,如果您正在为约束设置动画,请注意您可能已链接到该图像视图的任何其他约束。通常,如果您将某些东西放在图像的正下方,它的约束将链接到图像,因此您可能必须确保没有任何其他对图像有约束的控件(除非您也希望它们移动) .

您可以通过打开故事板或NIB然后选择“文件检查器”(最右侧面板上的第一个选项卡,或者您可以通过按option+ command+ 1(数字“1”)将其拉起来判断您是否使用自动布局):

自动布局开启

请记住,如果您计划支持 iOS 6 之前的版本,请确保关闭“自动布局”。自动布局是 iOS 6 的一项功能,不适用于早期版本的 iOS。

于 2013-01-07T04:47:49.423 回答
-1

你试试

logo.frame = CGRectMake(logo.frame.origin.x, logo.frame.origin.y - 100,logo.frame.size.width,logo.frame.size.height)
于 2013-01-07T04:23:14.410 回答