У меня есть собственный класс, в котором есть UIPanGestureRecognizer. И это работает в первый раз, когда я перемещаю его, но после того, как я позволю go, он не будет регистрировать никаких сенсорных событий. Почему жест панорамирования работает один раз и никогда больше? Я использую Swift 5.1 Вот мой код:
class ToolPallet: UIView {
// MARK: - Instance Variables
let kCONTENT_XIB_NAME = "ToolPallet"
// MARK: - Outlets
@IBOutlet var contentView: UIView!
@IBOutlet weak var grabberView: UIView! { didSet { grabberView.layer.cornerRadius = grabberView.bounds.width / 2 } }
@IBOutlet weak var grabberImageView: UIImageView! { didSet { grabberImageView.layer.cornerRadius = grabberImageView.bounds.width / 2 } }
@IBOutlet weak var palletView: UIView!
// MARK: - Actions
// some basic IBActions here
// MARK: - Intialization
init(handed: Handed) {
super.init(frame: CGRect())
self.handed = handed
Bundle.main.loadNibNamed(kCONTENT_XIB_NAME, owner: self, options: nil)
self.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(contentView)
translatesAutoresizingMaskIntoConstraints = true
self.frame = CGRect(x: 40, y: 142, width: 100, height: 481)
}
А вот контроллер вида:
class MainViewController {
let pallet = ToolPallet(handed: .right)
let panMethod = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
pallet.grabberView.addGestureRecognizer(panMethod)
canvasView.addSubview(pallet)
@objc func handlePan(recognizer: UIPanGestureRecognizer) {
if recognizer.view == pallet.grabberView {
switch recognizer.state {
case .began, .changed:
let translation = recognizer.translation(in: self.view)
pallet.grabberView.center = CGPoint(x: pallet.grabberView.center.x + translation.x, y: pallet.grabberView.center.y + translation.y)
pallet.palletView.center = CGPoint(x: pallet.palletView.center.x + translation.x, y: pallet.palletView.center.y + translation.y)
recognizer.setTranslation(CGPoint(x: 0, y: 0), in: self.view)
pallet.grabberView.transform = CGAffineTransform(scaleX: -1, y: 1)
pallet.palletView.transform = CGAffineTransform(translationX: 30, y: 0)
default:
break
}
}
}
}