UIView动画只能动画我要求的一些东西

时间:2010-03-24 08:17:10

标签: iphone animation uiview

我在屏幕上连续显示了一系列(比方说)方框,这是我主视图的所有子视图。每个都是UIView。我想将它们全部移开并有一个新的视图也从右边的锁步进入屏幕。这就是我正在做的事情:

// First add a dummy view offscreen
UIView * stagingView = /* make this view, which sets up its width/height */
CGRect frame = [stagingView frame];
frame.origin.x = /* just off the right side of the screen */;
[stagingView setFrame:frame];
[self addSubview:stagingView];

然后我在一个区块中为我的所有子视图设置了动画(其中包括我刚刚添加的子视图):

[UIView beginAnimations:@"shiftLeft" context:NULL];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(_animationDidStop:context:)];        
[UIView setAnimationDuration:0.3];
for (UIView * view in [self subviews]) {
    CGRect frame = [view frame];
    frame.origin.x -= (frame.size.width + viewPadding);
    [view setFrame:frame];
}
[UIView commitAnimations];        

这就是我的期望:屏幕上的(三个)视图向左移动,新上传的视图同时从右边进入。

以下是发生的情况:新上演的视图完全按照预期进行动画制作,屏幕上已有的视图根本不会移动! (或者他们可能会在没有动画的情况下跳到他们的终点位置。)

和!如果我注释掉在屏幕外创建新​​子视图的整个业务......屏幕上的那些正确动画!

咦?

更新:经过更多的讨论之后,我发现了一些令人惊奇的事情:我可以通过让layoutSubviews的自定义子类返回而不做任何工作来解决问题,如果它在时间之间调用动画已设置,完成时间。该方法需要做一些工作来调整方向更改期间这些子视图的位置。但是我并不真正理解动画与这种方法的相互作用 - 我认为它最终可能会在最后被调用,这将是有意义的,并且在动画之后应该基本上是无操作。谁能向我解释这种互动?似乎我接近启蒙,但还没有到那里。谢谢!

1 个答案:

答案 0 :(得分:1)

与评论者一样,我很好奇为什么要打电话给

[self stagingView];

我想是因为你试图触发drawRect:我也想知道为什么你没有在示例代码中将它添加为子视图,尽管我想你已经在某个地方完成了它。

我有两件事可能会有所帮助:

1.不要单独为“盒子”制作动画。为它们创建容器视图,然后只为容器视图设置动画。简单!

OR

2.不要依赖[查看子视图]才能正常工作。保留你自己想要移动的盒子阵列(一个ivar),然后迭代它。