Ios 动画中间的接收动作

Ios 动画中间的接收动作,ios,swift,animation,redux,Ios,Swift,Animation,Redux,我正在尝试在我的iOS应用程序中使用Redux,但我仍然有一些未回答的Redux问题 < P> 1)如何处理动画中间的接收状态更新? 例如:假设发生了一些状态变化并触发了一个动画,然后我收到了另一个更新(由于一些来自互联网的数据同步)。如何处理这种情况?i、 例如,延迟第二次更新,直到动画完成 2) 我应该只发送改变状态的动作,还是只发送动作来触发动画?例如:触发某些动画的动作(例如在UIScrollView中滚动到某个位置)不一定会更改任何状态(当然,我也有滚动位置的状态,但更改该状态并不意味

我正在尝试在我的iOS应用程序中使用Redux,但我仍然有一些未回答的Redux问题

< P> 1)如何处理动画中间的接收状态更新? 例如:假设发生了一些状态变化并触发了一个动画,然后我收到了另一个更新(由于一些来自互联网的数据同步)。如何处理这种情况?i、 例如,延迟第二次更新,直到动画完成


2) 我应该只发送改变状态的动作,还是只发送动作来触发动画?例如:触发某些动画的动作(例如在
UIScrollView
中滚动到某个位置)不一定会更改任何状态(当然,我也有滚动位置的状态,但更改该状态并不意味着动画移动到新的滚动位置,它可能意味着直接移动到该位置)。我还在动作创建者中有条件地触发动画,在另一个动作被调度并且其他一些状态被更改之后,所以我不能只在视图组件中这样做。

ReSwift的状态和动作处理与Redux惊人地相似,但具有强类型

有两种主要类型的动画来处理周围的状态。你的两个问题很好地概括了这一点

  • 设置为状态的动画。状态更改-如您的示例所示-将视图从任何有效状态转换为新状态。如果存在正在进行的现有动画,则可以取消它们(如果可能,使用正在执行的动画),或将下一个动画排队

    大多数情况下,如果可以取消动画,请取消它们。如果是列表视图,您没有太多选择。如果要对动画进行排队,请在动画运行时忽略任何视图更改,并更新最新状态的本地副本。然后确保任何动画都会触发完成块来比较动画前后的状态,如果状态不同,则启动另一个动画

  • 第二部分听起来像是可以将它们视为触发动画。即,登录失败,密码字段抖动一秒钟

    其中一些可以通过比较前一个字段值和当前字段值来处理,即,
    状态。登录状态从
    变为
    。挂起的
    变为
    。失败的
    将触发动画启动

    不过,您不会收到原始操作流,只会收到
    状态
    。这与Redux相同。我会鼓励即使对于可能不会影响国家的事件也要采取行动。但您看到这些操作的唯一方式是通过中间件。创建一个被动中间件对象,用于过滤操作流,并将其公开给ViewModel或ViewController

  • 我知道这听起来太简单了,但没有太多。只要将行动流视为真理的单一来源,将状态视为流的投影,将视图视为状态的投影。刚开始的时候感觉很有限,但很难出错

    注:

    • 目前,这意味着所有减缩器都将在主线程上运行,但它不是强制执行的,由您来确保从正确的线程执行调度

    如何对动画进行排队?假设我有3个动作改变了相同的状态<代码> ActionA < /代码>,<代码>动作B >代码> <代码> ActoCnc/代码>(所有引起动画),和<代码>动作B < /COD>和<代码> Actoc < /代码>在动画的中间从<代码> ActionA < /代码>中发送。我不想取消任何动画,也不想从
    动画A
    的末尾转到
    动画C
    的开头,我仍然希望
    动画B
    也被触发。我不能在设置动画时忽略状态更改,否则
    动画B
    将不会发生。当您说忽略任何视图更改时,您的意思是在每次
    更新
    调用中检查
    ignoreUpdates:Bool
    变量,如果它是
    true
    ,我只是
    返回
    ?那么我的ViewController将有一种“减速机”来接收动画动作?