У меня есть функция, которая создает линию перетаскивания, чтобы соединить 2 кнопки друг с другом. Это работает нормально, но если некоторые кнопки перекрывают друг друга, он выберет обе, если я перетащу их туда, где они перекрываются. Я хочу подключить только верхнюю кнопку.
Мне кажется, проблема в том, что sender.location выбирает слои сверху и снизу. Есть ли способ сказать sender.location, чтобы выбрать только вид сверху? Спасибо за любой вклад и направление
func addPanReconiser(view: UIView){
let pan = UIPanGestureRecognizer(target: self, action: #selector(DesignViewController.panGestureCalled(_:)))
view.addGestureRecognizer(pan)
}
@objc func panGestureCalled(_ sender: UIPanGestureRecognizer) {
let currentPanPoint = sender.location(in: self.view)
switch sender.state {
case .began:
panGestureStartPoint = currentPanPoint
self.view.layer.addSublayer(lineShape)
case .changed:
let linePath = UIBezierPath()
linePath.move(to: panGestureStartPoint)
linePath.addLine(to: currentPanPoint)
lineShape.path = linePath.cgPath
lineShape.path = CGPath.barbell(from: panGestureStartPoint, to: currentPanPoint, barThickness: 2.0, bellRadius: 6.0)
for button in buttonArray {
let point = sender.location(in: button)
if button.layer.contains(point) {
button.layer.borderWidth = 4
button.layer.borderColor = UIColor.blue.cgColor
} else {
button.layer.borderWidth = 0
button.layer.borderColor = UIColor.clear.cgColor
}
}
case .ended:
for button in buttonArray {
let point = sender.location(in: button)
if button.layer.contains(point){
//DO my Action here
lineShape.path = nil
lineShape.removeFromSuperlayer()
}
}
default: break
}
}
}
Примечание: некоторые строки кодов взяты из пользовательских расширений. Я держал их, потому что они говорят сами за себя.
Спасибо за помощь