UIDynamics在Playground的基础

总览

UIDynamics是由Apple创建的引擎,可根据定义的行为修改符合UIDynamicItem协议的类的实例的中心变换界限

UIView和UICollectionViewLayoutAttributes默认情况下符合UIDynamicItem协议。 在本文中,我们将重点介绍UIViews。

我可以在我的Github帐户中找到完整的Playground。 我完全建议下载并使用它,以查看每种行为的工作原理。 其中一个示例的示例:

搭建游乐场

在研究本文时,我发现Playground是实现和完善UIDynamic行为的非常有用的工具,因为它真的很容易设置并且非常快地从更改中获取反馈。

要创建一个具有以下视图的游乐场:

UICollisionBehaviour

它模拟元素之间的物理碰撞。 有两种类型:

  • 元素之间:添加多个项目。
  • 反对障碍:通过添加边界或将参考视图用作边界。

但是自从iOS 9以来,Apple为此行为添加了新方法,从而提供了非常有趣的附加元素方法。 让我们看一下它们:

滑动附件:此附件在两个元素之间创建附件,第一个元素可以在与第二个元素相关的axisOfTranslation定义的假想轴中移动。 试图脱离该假想线将导致该轴的参考元素旋转。

限制附件:这就像将绳索绑在两个元素上一样,因此当锚点之间的距离大于length参数时,它将拖动第二个视图。 它不会影响变换或边界,这意味着元素不会旋转。

固定附件:行为就像将一根棍子绑在两个元素上一样,因此元素之间的相对位置不会改变。

销钉附件:模拟两个钉在一起的物体。

常见错误

这些是我在研究中发现的最常见错误,希望处于相同情况的人可以通过阅读以下内容节省时间:

  1. 尝试手动修改中心,边界或变换。 例如,添加手势以移动视图以更改其中心将不起作用。 它会与UIDynamics引擎发生冲突,并且不会应用物理行为。 为了解决这个问题,您可以将UIAttachmentBehavior与anchorPoint一起使用,作为用户点击的位置。
  2. UIDynamics + Auto Layout结合起来时,我并没有遇到大问题,当我删除附件行为并添加推入行为时,这只是一种疏远行为。 它没有从同一角度流畅地推动视图,而是重设了位置。 解决方案是在删除附件之一之前添加推送行为。

结论

UIDynamics是一个出色的工具,可以明智地使用它,可以为您的应用程序增加很多价值,或者只是从中获得乐趣。 与Playgrounds结合使用,可以非常轻松快捷地为新行为建模。

Apple的有关此主题的文档和文章并不十分深入,因此您必须猜测一些参数范围。 例如,其中一些甚至没有像UIAttachmentBehavior的FrictionTorque这样的正式单位。

为了结合一些基本行为来构建更复杂的行为,我决定写另一篇文章,解释如何构建受Swarm启发的模态行为。