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