无法在2 UIView上提交动画

时间:2013-05-31 15:40:10

标签: animation uiview

我正试图将2个观点一起移动:

[UIView animateWithDuration:0.5
                     animations:^{
                        [currentView setCenter:CGPointMake(currentView.center.x + currentView.frame.size.width, currentView.center.y)];
                        [nextView setCenter:CGPointMake(nextView.center.x + nextView.frame.size.width, nextView.center.y)];
}];

然而,我无法做到这一点。只有nextView正在移动。

如果我只在一个上提交动画,它就可以正常工作。

可能是什么原因? 可能是因为我的宣言:

nextView = [[UIView alloc] initWithFrame:currentView.frame];

3 个答案:

答案 0 :(得分:0)

如果我读到这个正确,你有两个完全相同的视图,以完全相同的方式动画。可能是他们都在移动但是一个在另一个之上,所以你只看到顶视图?

答案 1 :(得分:0)

我尝试过这段代码:

    CGRect currentFrame = currentView.frame;
    currentFrame.origin.x = currentFrame.size.width;
    CGRect nextFrame = nextView.frame;
    nextFrame.origin.x = 0;

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.4];
    [currentView setFrame:currentFrame];
    [nextView setFrame:nextFrame];
    [UIView commitAnimations];

但它具有相同的效果:仅当动画是唯一要动画的视图时才在“currentView”上执行动画。 (没有行[nextView setFrame:nextFrame];)

使用断点,我在提交动画后打印了我对视图的描述:

Printing description of self->currentView:
<UIView: 0x1dd67ab0; frame = (320 0; 320 416); autoresize = W+H; animations = { position=<CABasicAnimation: 0x1de35a40>; }; layer = <CALayer: 0x1de61380>>
Printing description of self->nextView:
<UIView: 0x1dde57e0; frame = (0 0; 320 416); animations = { position=<CABasicAnimation: 0x1de35a80>; }; layer = <CALayer: 0x1dd12520>>

我的当前视图会出现在屏幕右侧,但它没有。

答案 2 :(得分:0)

我找到了解决问题的方法。

我的两个观点之间的主要区别在于,一个是从.xib创建的,另一个是以编程方式创建的。 一切都在写:

[currentView setTranslatesAutoresizingMaskIntoConstraints:YES];

因此.xib文件中有更改的内容,因此我不必以编程方式设置此掩码。