UIFieldBehaviour用于将动态视图捕捉到屏幕的顶部,底部或中间

时间:2016-10-08 17:55:31

标签: ios swift uikit-dynamics uidynamicbehavior uidynamicanimator

我使用的是可拖动视图,它是屏幕的宽度和高度,可以根据平移手势在屏幕上向上或向下移动。

当平移手势结束时,我希望它根据平移结束时视图的位置捕捉​​到屏幕的三个不同的y位置,顶部,中间或底部。我想要像UIFieldBehaviour这样的东西,其中一个力将它动画到正确的位置。

当在顶部时,将显示整个视图,当在底部时,仅显示30px,并且视图的其余部分将在屏幕下方。 因此,我需要力才能表现为视图的前30px。

强制场行为(抱歉画画不好):

enter image description here

快照行为:
enter image description here

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:1)

这比我想象的容易。 我正在使用新的UIViewPropertyAnimator,当pan .ended时,我只是通过将它与UIScreen的高度进行比较来检查目标y位置是否应该对齐顶部,底部或中间。

        animator!.addAnimations({
            print(target.frame.origin.y)

            if (target.frame.origin.y > UIScreen.main.bounds.height / 2) {
                if (target.frame.origin.y > (UIScreen.main.bounds.height - 50)) {
                    target.frame = CGRect(x: 0, y: UIScreen.main.bounds.height - 25, width: self.view.frame.width, height: self.view.frame.height)
                } else {
                target.frame = CGRect(x: 0, y: UIScreen.main.bounds.height - 95, width: self.view.frame.width, height: self.view.frame.height)
                }
            } else {
                target.frame = CGRect(x: 0, y: 120, width: self.view.frame.width, height: self.view.frame.height)
            }
        })
        animator!.startAnimation()