UPATE启动
正确的答案就在这里:
它是更多钞票上做的UIView多个动画,而无需使用完毕块
无需阅读。
UPATE结束
我也有类似的问题,因为UIView的animateWithDuration立即返回 ,但我不能使用完毕块,因为我的动画是在不同的功能。
但不要想动画相同的对象。
我正在打牌,所以我在屏幕上移动卡,但betwean动我也有一些游戏逻辑。 所以这为什么它是方便我做的动画作为独立。
如何解决这个问题?
@Fogmeister
与竣工的问题是以下几点:
方法1之后,方法2被调用。
如果我想调用方法1 52倍(因为我有52卡),然后方法2也将被称为52倍。
但在我的情况下我需要下,调用方法1 52倍,比调用方法2. 4倍...
所以,我看不出这可怎么打倒的竞争。
有时也被我需要调用方法1后方法2,但有时我需要方法1之后调用方法3 ...
我在想方法1后,使物体的深层副本,然后在新的对象调用方法2。
将这项工作?
@Fogmeister第二反应
我也得出同样的结论。
但我不喜欢它二人到以下几个原因。
我需要把游戏逻辑在动画逻辑,我想事情松散耦合。
动画代码不应处理游戏逻辑代码。
我不愿意做的是做多的动画,一个一个又一个相同的UIView对象,而无需使用完成:,因为我不会让动画代码简单,重复使用也。
如果你愿意,你可以下载我的代码
http://weborcode.com/dl/Tablic.zip
动画在TBL_CardView.m文件的方法做动画*
它是由被称为:
TBL_GameViewController.m文件的方法gameStateMachineLoop所有卡洗牌由左到右,再一个卡发送到再次离开。
但问题是,该卡已经在正确的洗牌之前,如果你启动这个项目你会本身它。
是不是真的有很多方式去的,但你不必每次动画动画一个东西。 如果你想动画所有的牌,然后用一个动画,并在更新所有的卡片animations
块。
如果你想动画所有的牌,然后别的东西,那么你可以做这样的事情?
- (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
}
所有你做的是控制流量。 别再想走动的表卡,多想想你们有什么工具,以及如何使用它们来使事情做你想做的。
文章来源: Call multiple animation, one after another one same UIView object, without using completion