有限制地上下移动视图

Posted

技术标签:

【中文标题】有限制地上下移动视图【英文标题】:Move view up and down with limitations 【发布时间】:2015-10-12 06:52:12 【问题描述】:

我有这段代码,它允许用户将视图向上拖动到一定程度:

  func handlePan(recognizer:UIPanGestureRecognizer) 
    let translation = recognizer.translationInView(self.view)

    print("the translation x:\(translation.x) & y:\(recognizer.view?.frame.minY)")

    if(recognizer.view?.frame.minY > -268)
    
        if let view = recognizer.view 

            view.center = CGPoint(x:view.center.x,
                y:view.center.y + translation.y)
        

        recognizer.setTranslation(CGPointZero, inView: self.view)
    



现在,我还想让用户在一定程度上向下拖动视图。 我怎样才能改变功能让他这样做?

目前,我可以向上移动视图,当他达到一定高度时,它会停止并且不能再向任何方向移动。

【问题讨论】:

【参考方案1】:

尝试更改输入处理移动中心的代码部分的条件。它可能看起来像这样(Obj-C sn-p):

if(recognizer.view.frame.origin.y <= 256 && recognizer.view.frame.origin.y >= 0) 
  // logic to move center

这会检查两个方向的视图位置。


编辑:

要在视图超出指定范围后移动视图,您可以随时检查新中心点是否在该范围内。例如。

CGPoint newCenter = CGPointMake(recognizer.view.center.x, recognizer.view.center.y + translation.y);
if (newCenter.y > 256) 
    newCenter.y = 256;

if (newCenter.y < 0) 
    newCenter.y = 0;

这是一个非常简单,也许不是很聪明的解决方案,但它应该可以工作,因为视图将无法离开范围。

【讨论】:

它没有用,它让我移动了一个非常小的视图 尝试将 0 和 256 值更改为其他值,这完全取决于您的视图在屏幕上的位置。 这样做,当视图因为达到最大高度而停止时,它就再也不能移动了,因为 origin.y 将始终保持不变

以上是关于有限制地上下移动视图的主要内容,如果未能解决你的问题,请参考以下文章

限制scrollView的上下移动

在窗口范围内限制/移动上下文菜单(右键单击)

06.看板实践——限制在制品

限制超级视图内的视图

我可以在我的移动网站上安全地限制桌面用户的访问吗? [复制]

如何限制从顶部定位我的标签,但在隐藏导航栏时不让它移动(因为它会调整视图高度)?