将动态视图捕捉到屏幕顶部、底部或中间的统一行为

Posted

技术标签:

【中文标题】将动态视图捕捉到屏幕顶部、底部或中间的统一行为【英文标题】:UIFieldBehaviour for snapping dynamic view to top, bottom or middle of screen 【发布时间】:2016-10-08 17:55:31 【问题描述】:

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

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

在顶部时将显示整个视图,而在底部时仅应显示 30px,其余视图将位于屏幕下方。 因此,我需要强制只对视图的顶部 30px 起作用。

力场行为(画得不好见谅):

快照行为:

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

【问题讨论】:

【参考方案1】:

这比我想象的要容易。 我正在使用新的 UIViewPropertyAnimator,当 pan .ended 时,我只是通过将目标 y 位置与 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()

【讨论】:

以上是关于将动态视图捕捉到屏幕顶部、底部或中间的统一行为的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - 使用锚链接将元素滚动到屏幕中间而不是顶部

scrollIntoView将指定元素定位到浏览器顶部,底部,中间

UITableView 滚动到单元格顶部

Page curl modal segue:将底部栏留在屏幕上

UITextView从文本的底部或中间开始

故事板约束问题:屏幕高度的一半