iOS - 如何将一个视图的子视图拖动到一个新视图(即Drag-n-Drop)?

时间:2015-03-05 17:28:44

标签: ios swift uiview uiscrollview drag-and-drop

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

层次结构如下所示:

  • 的SuperView
    • 热门UIScrollView
      • DraggableView类对象
    • 中间UIScrollView(可放置)
    • 底部UIScrollView(可放置)

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

这是我添加到类“DraggableView”的拖动方法,它是UIView的子类。

代码:

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 个答案:

答案 0 :(得分:1)

我认为你不能把它拖出超级视界。 你能做的是:

  1. 创建可拖动视图的副本
  2. 将其添加到Superview
  3. 从Top UIScrollView
  4. 删除可拖动视图
  5. 将其拖至Midlle UIScrollView
  6. 把它放在它上面
  7. 从Superview中删除
  8. 并再次创建并将其添加到Middle UIScrollView