Обработчик UIPanGestureRecognizer аварийно завершает работу моих приложений - swift - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть приложение, которое содержит UIImageView.Я нарисовал маленький кружок в подвиде родителя UIImageView.Я хотел бы, чтобы пользователь мог касаться и перетаскивать маленький синий круг в основном UIImageView.Я настроил UIPanGestureRecognizer для этого дочернего просмотра.Я пытаюсь проверить, запускается ли мой обработчик для UIPanGestureRecognizer, но когда я касаюсь и перетаскиваю основную UIImageView, мое приложение вылетает со следующей ошибкой:

Завершается работа приложенияк необработанному исключению 'NSInvalidArgumentException', причина: '- [UIView firstDotHandlerWithSender:]: нераспознанный селектор отправлен в экземпляр 0x103507d80'

Swift :

var firstDotView: UIView?
@IBOutlet weak var imgView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    firstDotView = UIView.init()
    firstDotView?.frame = imgView.bounds
    imgView.addSubview(firstDotView!)

    // DRAW A FILLED IN BLUE CIRCLE
    drawBlueCircle()

    imgView.isUserInteractionEnabled = true
    firstDotView?.isUserInteractionEnabled = true

    // ADD GESTURE RECOGNIZER
    let firstDotPanRecgnzr = UIPanGestureRecognizer.init(target: firstDotView!, action: #selector(firstDotHandler(sender:)))
    firstDotView?.addGestureRecognizer(firstDotPanRecgnzr)
}


@objc func firstDotHandler(sender: UIPanGestureRecognizer) -> Void {

    print("translation ...")

    let firstDot = sender.view
    let translation = sender.translation(in: view)

    if(sender.state == .began || sender.state == .changed){
        firstDot?.center = CGPoint.init(x: (firstDot?.center.x)! + translation.x, y: (firstDot?.center.y)! + translation.y)
        sender.setTranslation(CGPoint.zero, in: self.view)
    }
}

func drawBlueCircle(){
    let layer = CAShapeLayer()
    layer.path = UIBezierPath.init(roundedRect: CGRect.init(x: 60, y: 60, width: 30, height: 30), cornerRadius: 50).cgPath
    layer.fillColor = UIColor.blue.cgColor
    firstDotView?.layer.addSublayer(layer)
}

1 Ответ

0 голосов
/ 14 сентября 2018

цель для вашего UIPanGestureRecognizer равна неправильно .

let firstDotPanRecgnzr = UIPanGestureRecognizer(target: self, action: #selector(firstDotHandler(sender:)))

target сообщает жесту панорамирования, где находится ваш селектор. Я думаю, что вы спутали его с тем, над каким элементом он должен действовать. (Я сделал ту же ошибку, когда я был новым: D)


Из документов .

цель

Объект, который является получателем сообщений действий, отправленных приемник, когда он распознает жест. Ноль не является допустимым значением.

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