使用 UIDynamicAnimator 水平动画 UIView

Posted

技术标签:

【中文标题】使用 UIDynamicAnimator 水平动画 UIView【英文标题】:Animate UIView horizontally using UIDynamicAnimator 【发布时间】:2014-04-17 05:36:45 【问题描述】:

我已经浏览了文档,我很尴尬地说我很困惑。

情景

我有一个UIView,它的作用类似于 3 个UIButtons 的容器。这个容器最初的边界是0, 0, 35, 35,里面的每个按钮都有相同的坐标(alpha 0)。在用户执行特定操作时,容器将边界更改为0, 0, 100, 35,并且按钮分别动画到 x-origin 5、35 和 65,alpha 1,以便它们在调整大小的内部展开容器。我将此称为容器的扩展状态。用户执行相同的操作,将其切换回原始合同状态

目标

我目前正在使用[UIView animateWithDuration:] 块执行此操作,但想使用UIDynamicAnimator 添加有弹性的效果,这样,当切换到展开状态时,容器会通过弹跳调整大小(调整大小有点额外, 并弹回目标边界),按钮也会弹跳(再移动一点,然后弹回目标边界)。

混乱

UIDynamicAnimator,UIDynamicBehavior,UIAttachmentBehavior,UIDynamicItem.....这一切都让我对UIKitDynamic的理解溢出了。我想我应该使用 UISnapBehavior ,但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

事实证明,不需要使用UIDynamicAnimator 和所有其他动态 动画。我所需要的只是animateWithDuration:delay:usingSpringWithDamping: initialSpringVelocity: options: animations: completion: 类方法。只需使用它代替任何简单的 animateWithDuration: 方法,它就会产生我想要实现的确切行为。

示例代码:

    [UIView animateWithDuration:0.4
                          delay:0
         usingSpringWithDamping:0.5
          initialSpringVelocity:0.5
                        options:0
                     animations:^

                         //Animation code

                      completion:nil];

【讨论】:

以上是关于使用 UIDynamicAnimator 水平动画 UIView的主要内容,如果未能解决你的问题,请参考以下文章

减慢 UIDynamicAnimator 的动画

使用 UIDynamicAnimator 后图像模糊

IOS7笔记-8协议block动画

iOSUIDynamicAnimator动画

Swiftui 动态动画面板从下到上

将 CGAffineTransformScale 与 UIAttachmentBehavior (UIDynamicAnimator) 一起使用