Ios 快速拖动子视图以在特定位置删除

Ios 快速拖动子视图以在特定位置删除,ios,swift,uiview,subview,Ios,Swift,Uiview,Subview,我试图找到一种方法,在到达某个位置时拖动和删除子视图。到目前为止,我拥有的是一个视图控制器,我在其上添加了几个子视图。我的子视图类是可旋转和可调整大小的,我可以在视图控制器上移动它们。假设我想移动视图控制器顶部中心的子视图并将其删除。我的父视图控制器如何知道子视图的位置并执行删除? 另一个问题是,所有子视图都是从同一个自定义类生成的。如何定义应该删除的子视图? 提前感谢。您可以使用UIPangestureRecognitor移动视图,并查看新位置是否将您带入删除区域(如果您希望要求您完全处于删除

我试图找到一种方法,在到达某个位置时拖动和删除子视图。到目前为止,我拥有的是一个视图控制器,我在其上添加了几个子视图。我的子视图类是可旋转和可调整大小的,我可以在视图控制器上移动它们。假设我想移动视图控制器顶部中心的子视图并将其删除。我的父视图控制器如何知道子视图的位置并执行删除? 另一个问题是,所有子视图都是从同一个自定义类生成的。如何定义应该删除的子视图?
提前感谢。

您可以使用UIPangestureRecognitor移动视图,并查看新位置是否将您带入删除区域(如果您希望要求您完全处于删除区域内,请改用):


如果您有多个视图,可以使用UIView.tag或Set来确定哪个视图是哪个视图。

请检查,这是我复制的WWDC演示,这可能会对您有所帮助。谢谢,这非常有用。我会试试的。谢谢你的建议。此手势应在子视图或控制器上实现。因为我在我的子视图类上使用UIPangestureRecognitor。实际上,我仍然会在viewController上实现它,并使用一个视图数组。在这种情况下,您将平移手势识别器放在主视图上,并在识别的手势开始views.first{$0.frame.contains(point)}时检查数组,以获得第一次接触的视图。这样,您就不需要子类和协议。
    @IBAction func pan(_ recognizer: UIPanGestureRecognizer) {
        let translation = recognizer.translation(in: self.view)
        centerXConstraint.constant += translation.x
        centerYConstraint.constant += translation.y
        viewToMove.offset.x += translation.x
        viewToMove.offset.y += translation.y
        if viewToMove.frame.intersects(deletionRect) {
            //Delete logic here
        } else {
            viewToMove.setNeedsDisplay()
            recognizer.setTranslation(.zero, in: self.view)
        }

    }