【发布时间】:2014-06-17 09:30:54
【问题描述】:
UPATE 开始
正确答案在这里:
Is it posible to do multiple animations on UIView without using completion block
无需阅读。
UPATE结束
我有与UIView animateWithDuration returns immediately 类似的问题,但我不能使用完成块,因为我的动画在不同的功能中。
但确实想为同一个对象设置动画。
我正在制作纸牌游戏,所以我在屏幕上移动纸牌,但在移动之间我也有一些游戏逻辑。这就是为什么我可以方便地单独制作动画。
如何解决这个问题?
@Fogmeister
完成问题如下:
在method1之后,method2被调用。
如果我想调用method1 52次(因为我有52张卡),那么method2也会被调用52次。
但在我的场景中,我需要调用 method1 52 次,而不是调用 method2 4 次...
所以我看不出这会因竞争而下降。
有时我需要在method1之后调用method2,但有时我需要在method1之后调用method3...
我正在考虑在方法 1 之后对对象进行深层复制,然后在新对象上调用方法 2。
这行得通吗?
@Fogmeister 第二次回复
我也得出了同样的结论。
但由于以下原因,我不喜欢它。
我需要将游戏逻辑放在动画逻辑中,并且我希望事情是松散耦合的。
动画代码不应处理游戏逻辑代码。
我想做的是做多个动画,一个接一个的同一个UIView对象,不使用completion:,因为我不会保持动画代码简单并重用它。
如果你愿意,可以从
http://weborcode.com/dl/Tablic.zip
下载我的代码
动画在 TBL_CardView.m 文件方法动画中完成*
它是从以下位置调用的:
TBL_GameViewController.m 文件方法 gameStateMachineLoop
所有卡片从左到右洗牌,然后一张卡片再次发送到左边。
但问题是那张牌在洗牌前就已经在右边了,
如果你启动这个项目,你就会成功。
【问题讨论】:
-
那就解耦吧!严重地?我不是为你写你的代码。我正在建议绕过它的方法。是什么阻止您调用游戏逻辑类上的方法来确定接下来要调用哪个方法?我在其中放了一个 if 块,向您展示您可以将实际代码放在那里。如果不是一成不变的。您可以选择许多不同的解决方案。你现在应该可以做到了。