iPhone - 同时动画2个子视图

时间:2011-09-29 22:10:08

标签: iphone ios cocoa-touch animation uiview

我有2个子视图占据整个屏幕(状态栏除外)。我们称这个尺寸为“屏幕尺寸”。

我想动画两个:

  • 第一个从屏幕尺寸稍大一点缩放到屏幕尺寸,从alpha 0到alpha 1。

  • 从屏幕尺寸到屏幕尺寸的第二个,从alpha 1到alpha 0。

第二个视图在开始时可见并在屏幕上显示。

我写了这个:

- (void) switchViews
{
    if (self.view2Controller == nil) {
        self.view2Controller = [[View2Controller alloc] initWithNibName:@"View2XIB" bundle:nil];
        self.view2Controller.view.hidden = YES;
        [self.view addSubview:self.view2Controller.view];
    }

    CGRect bigFrame = CGRectInset(self.view.frame, -50, -50);
    CGRect normalFrame = self.view.frame;
    CGRect smallFrame = CGRectInset(self.view.frame, 50, 50);

    self.view2Controller.view.frame = bigFrame;
    self.view2Controller.view.alpha = 0.0;

    [UIView beginAnimations:@"Anim1" context:nil];
    [UIView setAnimationDuration:5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

    self.view2Controller.view.hidden = NO;
    self.view2Controller.view.frame = normalFrame;
    self.view2Controller.view.alpha = 1.0;

    [UIView commitAnimations];

    // ------------------------------

    [UIView beginAnimations:@"Anim2" context:nil];
    [UIView setAnimationDuration:5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)];

    self.view1Controller.view.frame = smallFrame;
    self.view1Controller.view.alpha = 0.0;

    [UIView commitAnimations];
}

当然,我首先尝试将两个动画放入一个独特的动画中。这并没有改变任何东西,这就是我试图将它们分开的原因。

启动时,view1立即转为黑色,然后view2按预期启动动画。但我无法同时运行这两个动画。

我该怎么做?

3 个答案:

答案 0 :(得分:2)

尝试查看基于块的动画。这是iOS 4.0+推荐的方法。看看这里的答案:What are block-based animation methods in iPhone OS 4.0?

修改 试试这样的事情

//You can do the same thing with a frame
CGPoint newCenter = CGPointMake(100, 100);
[UIView animateWithDuration:2.0
                 animations:^{ 
                     firstView.center = newCenter;
                     secondView.center = newCenter;
                     firstView.alpha = 0.2;
                 } 
                 completion:^(BOOL finished){
                     NSLog(@"All done animating");
                 }];

您放入动画内的任何内容:^ {}将是您视图的目标设置。上面我向您展示了如何改变位置以及alpha。

答案 1 :(得分:0)

我认为您想要使用的是CAAnimationGroup(核心动画组)。

  

CAAnimationGroup允许对多个动画进行分组并同时运行。分组的动画在CAAnimationGroup实例指定的时间空间中运行。

它有一个animations属性,您可以将其设置为您希望它与setAnimations:一起使用的动画数组。

这是usage example

答案 2 :(得分:0)

我在代码中看不到任何错误。 所以我在我的项目中尝试了你的代码并且它运行良好:它完全符合你的需要。

View1向右移动并淡出,而view2来自左上角和淡入...

所以我想你必须在其他地方寻找错误......

侨,

卢卡

修改

这是代码:

test-switch.zip