iOS - 如何将一个视图的子视图拖到一个新视图中(即拖放)?
iOS - How to drag a subview of one view into a new view (i.e. Drag-n-Drop)?
我正在构建一个应用程序,它将在屏幕顶部的滚动视图中包含对象,并希望用户能够将这些子视图拖到下面的新滚动视图中。
层次结构如下所示:
- 监督
- 顶部UIScrollView
- DraggableView class 个对象
- 中间的 UIScrollView(可放置)
- 底部 UIScrollView(可放置)
我已经让子视图可以拖动,但它们只在它们的父视图(顶部滚动视图)中保持可见。我希望能够将它们拖到主超级视图中的任何位置(即控制器的 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)
}
}
我认为您不能将其拖出超级视图范围。
您可以做的是:
- 创建可拖动视图的副本
- 将其添加到 Superview
- 从顶部 UIScrollView 中删除可拖动视图
- 将它拖到 Midlle UIScrollView
- 放在上面
- 从 Superview 中删除它
- 并重新创建并添加到Middle UIScrollView
我正在构建一个应用程序,它将在屏幕顶部的滚动视图中包含对象,并希望用户能够将这些子视图拖到下面的新滚动视图中。
层次结构如下所示:
- 监督
- 顶部UIScrollView
- DraggableView class 个对象
- 中间的 UIScrollView(可放置)
- 底部 UIScrollView(可放置)
- 顶部UIScrollView
我已经让子视图可以拖动,但它们只在它们的父视图(顶部滚动视图)中保持可见。我希望能够将它们拖到主超级视图中的任何位置(即控制器的 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)
}
}
我认为您不能将其拖出超级视图范围。 您可以做的是:
- 创建可拖动视图的副本
- 将其添加到 Superview
- 从顶部 UIScrollView 中删除可拖动视图
- 将它拖到 Midlle UIScrollView
- 放在上面
- 从 Superview 中删除它
- 并重新创建并添加到Middle UIScrollView