Swift拖动子视图以删除某个位置

时间:2017-02-16 17:17:20

标签: ios swift uiview subview

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

1 个答案:

答案 0 :(得分:0)

您可以使用UIPanGestureRecognizer移动视图和CGRect.intersects以查看新位置是否会将您带入删除区域(如果您要求完全在删除范围内,请使用contains区):

    @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)
        }

    }

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