当前位置: 首页 > 知识库问答 >
问题:

调用多个动画,一个接一个地调用同一个UIView对象,而不使用完成

阎渝
2023-03-14

UPATE启动

正确答案如下:
是否可以不使用完成块在UIView上执行多个动画

没必要读这个。

上端

我有类似的问题,UIView animateWithDuration会立即返回,但我不能使用完成块,因为我的动画有不同的功能。

但确实想要动画相同的对象。

我在做纸牌游戏,所以我在屏幕上移动纸牌,但在移动之前,我也有一些游戏逻辑。这就是为什么我可以方便地单独制作动画。

如何解决这个问题?

@Fogmeister
完成的问题如下:
在method1之后,调用method2
如果我想调用method1 52次(因为我有52张卡),那么method2也会被调用52次<但是在我的场景中,我需要遵循,调用method1 52次,而不是调用method2 4次<所以我看不出这怎么会与竞争相抗衡
有时我需要在method1之后调用method2,但有时我需要在method1之后调用method3。。。

我想在method1之后对对象进行深度复制,然后在新对象上调用method2<这样行吗?

@Fogmeister 2回应
我也得出了同样的结论。
但是我不喜欢下面的原因。
我需要把游戏逻辑放在动画逻辑中,我希望事情是松散耦合的。动画代码不应该处理游戏逻辑代码。

我想做的是做多个动画,一个接一个相同的UIView对象,而不使用完成:,因为我不会保持动画代码简单,也可以重用它。

如果需要,可以从
http://weborcode.com/dl/Tablic.zip
动画在TBL_CardView中完成。m file method animation*
并从以下位置调用:
TBL_GameViewController。m文件方法GameStateMachineLop所有卡从左到右洗牌,然后一张卡再次发送到左<但问题是,在洗牌之前,这张牌已经在右边了,如果你开始这个项目,你就会把它换掉。

共有1个答案

姬寂离
2023-03-14

没有太多的信息可以继续,但是你不必为每个动画制作一个东西。如果你想动画所有的卡片,那么使用一个动画并更新动画块中的所有卡片。

如果你想给所有的卡片加上动画,然后做其他的事情,那么你可以这样做。。。

- (void)animateCards:(NSArray *)cards
{
    // call this once and all of the cards in the array will animate over 5 seconds.
    [UIView animateWithDuration:5.0
                     animations:^{
                         for (Card *card in cards) {
                             card.frame = // whatever
                         }
                     }
                     completion:^(BOOL finished) {
                         if (iNeedToCallMethod2) {
                             [self doSomethingElse];
                         } else {
                             [self somethingCompletelyDifferent];
                         }
                     }];
}

- (void)doSomethingElse
{
    //this will only run after all the cards have animated
    //if the condition requires it to run

    [UIView animateWithDuration:5.0
                     animations:^{
                         for (Suit *suit in self.suits) {
                             // not really sure what you want to do here
                             // but you can do the same as above
                         }
                     }
                     completion:^(BOOL finished) {
                     }];
}

- (void)somethingCompletelyDifferent
{
    //this will run once only if the other method doesn't run
}

你所做的就是控制流量。不要再考虑在桌子周围移动卡片,多想想你有什么工具,以及如何使用它们来做你想做的事情。

 类似资料:
  • 问题内容: 我有以下JavaScript代码: 我如何确保仅在完成后调用? 问题答案: 指定一个匿名回调,并使function1接受它:

  • 我正在尝试编写一个简单的应用程序,其中包含一个跟踪每个用户支付的款项的表和一个包含每个用户支付的总金额(所有付款的总和)的第二个表。目前,两个表都有相同的字段(firstName、lastName、金额),我已经将它们从同一个Java类映射到多个表,我无法将该类映射到多个表。对此有什么简单的解决方案吗?

  • 问题内容: 这有道理吗? 假设我需要从数据库中获取一个与另一个对象有关系的对象(由数据库中的外键以及域对象中的组合表示)。如果在我的第一个DAO中,我获取对象1的数据,则调用对象2的dao,最后(从第一个DAO中,调用对象1中的setter,并为其提供先前获取的对象2)。 我知道我可以代替加入连接,但是对我来说,断开功能耦合似乎更合乎逻辑(这就是为什么我对从另一个调用一个dao持怀疑态度)。还是应

  • 我正在使用ZXING1.7库开发J2ME条形码扫描器,因为1.7是支持J2ME的最新版本。 由于条形码功能已经作为这个Zxing的一部分出现了,所以我需要从我的组件MIDlet调用ZxingMidlet.java。 由于我对J2ME非常陌生,所以我不知道如何从另一个MIDlet调用ZxingMidlet。如果有人已经在J2ME上工作过/有这方面的经验,请提供您的投入/支持。 这对我会有很大的帮助。

  • 我正在寻找一种解决方案,来解决需要按顺序一个接一个地执行的命令集。同样,只有在前一个命令完成执行后,才能执行一个命令。 我试着用“;”执行命令对于每个命令,但所有命令都在一次尝试中执行。所以,它不起作用。在同一个shell/exec中运行每个命令的可能方法是什么。

  • 我有一个简单的动画文件: 基本上,这会将一个组件沿X轴向左滑动50 dp。我已经成功地将它附加到一个组件上,它工作得非常完美,但是当我尝试同时将它附加到多个组件上时,动画只适用于最后一个组件。 例如:我有5张牌。AI敌人从手中随机选择一张牌。但是我想动画敌人“捡”卡。这就是动画发挥作用的地方。 比如说: 这里的目标是循环阵列中的每张卡,并将其滑出X轴。但动画只出现在最后一张牌上(阵列中的第五张牌)