Почему пользовательское представление класса не панорамируется после первого панорамирования? - PullRequest
0 голосов
/ 14 марта 2020

У меня есть собственный класс, в котором есть 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
        }

    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...