状況
UISwipeGestureRecognizer
を使ったとき
unrecognized selector sent to instance
がで続けてハマったのでメモ。ちなみにハマったときに書いてたコードが以下。(一部簡略化してます)
private func setSwipe(girlsView: GirlsView) {
let rightSwipe = UISwipeGestureRecognizer(target: self, action: "didSwipe:"))
rightSwipe.direction = .right
girlsView.addGestureRecognizer(rightSwipe)
}
private func didSwipe(sender: UISwipeGestureRecognizer) {
if sender.direction.contains(.right) {
print("Right!")
getFrontView().removeFromSuperview()
girlsViewArray.removeLast()
}
}
対策
調べるとaction
の関数名書くところに:
をつけなきゃダメとかあったのですがうまくいかず
@objc
にして#selector
で囲ったらうまく行きました(addTargetと同じやり方ですね)
private func setSwipe(girlsView: GirlsView) {
let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(didSwipe(sender:)))
rightSwipe.direction = .right
girlsView.addGestureRecognizer(rightSwipe)
}
@objc func didSwipe(sender: UISwipeGestureRecognizer) {
if sender.direction.contains(.right) {
print("Right!")
getFrontView().removeFromSuperview()
girlsViewArray.removeLast()
}
}
参考
・ios – SpriteKitとUISwipeGestureRecognizer - コードログ
・ios - UITapGestureRecognizer unrecognized selector sent to instance - Stack Overflow
・UISwipeGestureRecognizerの罠と左右スワイプの実装 - Qiita