调用多个动画,一个一个又一个相同的UIView对象,而无需使用完毕(Call multiple an

2019-10-20 07:37发布

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所有卡洗牌由左到右,再一个卡发送到再次离开。
但问题是,该卡已经在正确的洗牌之前,如果你启动这个项目你会本身它。

Answer 1:

是不是真的有很多方式去的,但你不必每次动画动画一个东西。 如果你想动画所有的牌,然后用一个动画,并在更新所有的卡片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
标签: ios xcode