开始动画前修改的iPhone动画容器视图(Modifying an iPhone animation

2019-08-08 13:01发布

我加入了一些基本的动画到游戏卡我的工作。 (我的第一个iPhone应用程序。)

我创建一个自定义的UIView类“AnimationContainer”,从图像1翻转到镜像2,而从Rect1的到RECT2移动。 我的最终目的是有多达这些容器同时做他们的过渡中的四个。

我遇到的问题是,动画不显示图像1 ......出现这样只有翻动过渡的后半段。

但是,如果我第一次重置动画通过触摸复位,然后一切完美的作品。 换句话说,如果我按一次又一次地翻转,我只得到一半的过渡......但如果我按先复位,然后一切完全适用于一个翻转。

所以,我怎么能得到的动画本身正确重置?

下面是代码,截图,这里是到完整的链接: 项目Zip文件700K 。

- (void)displayWithImage1 {     //RESET button calls this
    self.frame = rect1;
    [image2 removeFromSuperview];
    [self addSubview:image1];
    [self setNeedsDisplay]; //no help: doesn't force an update before animation
}

- (void)runTheAnimation {     //FLIP button calls this
    [self displayWithImage1]; //<---this is what the reset button calls
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationTransition:transition forView:self cache:NO];
    self.frame = rect2;
    [image1 removeFromSuperview];
    [self addSubview:image2];
    [UIView commitAnimations];
}

谢谢!

Answer 1:

你需要一个绘制循环中顺序执行动画之前重绘视图通过。 此代码是一个例子“得出这样的,当一个事件循环恶有恶报,做到这一点其他东西。” 它的情况并不少见为此在UI代码。 你的第一个解决办法是尝试同样的事情,但在一个更复杂的方式。

- (void)_runTheAnimation {
    // Moved here from -runTheAnimation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationTransition:transition forView:self cache:NO];
    self.frame = rect2;
    [image1 removeFromSuperview];
    [self addSubview:image2];
    [UIView commitAnimations];
}

- (void)runTheAnimation {     //FLIP button calls this
    [self displayWithImage1];
    [self performSelector:@selector(_runTheAnimation) withObject:nil afterDelay:0.0];
}


文章来源: Modifying an iPhone animation container view before starting animation