UIscrollview和拖放

时间:2014-09-26 07:54:29

标签: ios swift uiscrollview drag-and-drop

我正在创建一种网格视图,您可以在其中添加一些小部件,并根据需要通过拖放来重新排列它们。 我现在的网格视图是UIscroll视图,小部件是UIview的子类。

以下是您可以使用的网格示例 当我拖动窗口小部件时,如果窗口小部件靠近屏幕底部,我希望能够使滚动视图向下移动。 目前,我的小部件有一个UIPanGestureRecognizer 以下代码:

 func enterDragMode(recognizer:UIPanGestureRecognizer) {

    if (recognizer.state == UIGestureRecognizerState.Ended) || (recognizer.state == UIGestureRecognizerState.Cancelled) {
        gridNotificationCenter.postNotificationName("WidgetDragEnded", object: self)
        // Notify the grid and drop the widget here
    } else {
        var translation  = recognizer.translationInView(self.superview!)
        var newPoint = self.center
        newPoint.x += translation.x
        newPoint.y += translation.y

        if (CGRectContainsRect(moveDownRect, self.frame)) {
            var scrollview = self.superview as? UIScrollView
            if (scrollview != nil) {
              // need to find correct visible rect here 
              res!.scrollRectToVisible(visibleRect, animated: true)
            }
        }
        recognizer.setTranslation(CGPointZero, inView: self.superview)
    }
}

但我觉得我没有使用正确的类来正确处理这个问题,因为当我只是按住视图而不是移动它时,不会触发回调。还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

尝试在视图底部附近设置虚拟区域。 移动平移手势时触发。如果它进入该区域,只要平移手势没有离开该区域并且没有结束,就开始向下滚动。

使用计时器(NSTimer而非CADisplayLink,因为您在刷新时无法在视图上应用滚动),只要您在指定区域内,就可以增加滚动视图的大小。