iOS - 如何将一个视图的子视图拖到一个新视图中(即拖放)?

iOS - How to drag a subview of one view into a new view (i.e. Drag-n-Drop)?

我正在构建一个应用程序,它将在屏幕顶部的滚动视图中包含对象,并希望用户能够将这些子视图拖到下面的新滚动视图中。

层次结构如下所示:

我已经让子视图可以拖动,但它们只在它们的父视图(顶部滚动视图)中保持可见。我希望能够将它们拖到主超级视图中的任何位置(即控制器的 self.view) 我尝试通过设置子视图的 属性、'dragView'.

将主超级视图传递给可拖动视图

这里是我添加到class,"DraggableView"的拖拽方法,是UIView的子class

代码:

class DraggableView: UIView
{
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var titleLabel: UILabel!
    var dragView: UIView! // Superview to pass in

     override func touchesMoved(touches: NSSet, withEvent event: UIEvent)
     {
         let touch = touches.anyObject() as UITouch
         let location = touch.locationInView(self.dragView)
         let oldLocation = touch.previousLocationInView(self.dragView)
         self.frame = CGRectOffset(self.frame, location.x-oldLocation.x, location.y-oldLocation.y)
     }
}

我认为您不能将其拖出超级视图范围。 您可以做的是:

  1. 创建可拖动视图的副本
  2. 将其添加到 Superview
  3. 从顶部 UIScrollView 中删除可拖动视图
  4. 将它拖到 Midlle UIScrollView
  5. 放在上面
  6. 从 Superview 中删除它
  7. 并重新创建并添加到Middle UIScrollView