这是CA动画序列Sitch

时间:2012-05-17 18:06:34

标签: ios core-animation

前一段时间我问了一个问题(Animation Sometimes Doesn't Occur)关于动画有时候不会发生的事情。我没有得到有用的答案。因此,经过大量的研究和游戏后,我发现有时候应该发生的动画有时会先发生。另一个确实发生了,而不是在预期会发生的时候。这两个动画是“翻转”和“消失”。例如,有四个瓷砖。当触摸一个瓷砖时,它会翻转。当触摸第二个图块时,应该翻转。如果瓷砖匹配,则两个瓷砖都会消失。如果它们不匹配,则瓷砖会翻转。就我能说的而言,回溯动画总是正确发生。换句话说 - 翻转第一个图块。翻转第二个图块。瓷砖不匹配。这两块瓷砖翻盖。至于瓦片匹配时,第一个瓦片正确翻转。有时第二个图块会正确翻转,然后它们都会消失(旋转和缩小的动画组)。有时第二个瓷砖没有正确翻转,但它们都会在第二个瓷砖翻转之前消失。这是不可接受的。

这是我到目前为止所尝试的 - 我尝试过NSThread暂停。这不起作用,因为整个线程暂停,这不会让未发生的动画发生。我查看了NSTimer - 但是被调用的方法有两个参数,这意味着我必须做NSInvocation而我还没想出来 - 并且不确定它是否会起作用。现在,我已经放了一个标记,标记翻转动画何时完成。如果这种方法最终有效,我必须弄清楚如何考虑在不增加完成次数的情况下翻转和重新翻转单个图块。无论如何 - 使用这种方法,我需要弄清楚如何告诉我的第二个动画等到第一个动画完成后再运行。

我希望能够做的是告诉消失的动画总是等到第二个图块完全翻转后再提交。

我无法弄清楚的是a)为什么有时动画会以正确的顺序发生,有时它们不会和b)当动画试图不以正确的顺序发生时,如何强制它们发生按照正确的顺序。

不确定哪些代码对您有帮助。问我和我会提供!

以下是调用动画的代码:

-(void)buttonPressed: (UIButton*)buttoni 
{
    [self flipTiles:(UIButton *)buttoni];
    [self twoTilesFlipped];
}

显然,首先调用flipTiles动画。我不明白为什么它有时直到在twoTilesFlipped中调用的代码之后才被调用。我认为编程是关于逻辑的,这对我来说没有逻辑意义。哦,我只是想了一下......我将在这段代码中加入NSTimer延迟 - 也许这样做会有所帮助!

1 个答案:

答案 0 :(得分:0)

这似乎已经成功了。我现在显然需要修改一些调整,但至少它每次都有效。

这是我添加的内容:

[NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(twoTilesFlipped)
                                   userInfo:nil
                                    repeats:NO];

所以该方法的最终代码是:

-(void)buttonPressed: (UIButton*)buttoni 
{
    [self flipTiles:(UIButton *)buttoni];
    [NSTimer scheduledTimerWithTimeInterval:2.0
                                     target:self
                                   selector:@selector(twoTilesFlipped)
                                   userInfo:nil
                                    repeats:NO];
}