前提・実現したいこと
現在サッカーのフォーメーションアプリをswiftで制作しています。
機能としては選手一人一人に名前をつけるために各選手をタップすることで編集画面に画面遷移し名前をつける機能と各選手をドラッグし移動させる機能を実装しています。
実際は以下のような感じで作っています。
一人の選手を作る際にはviewの上にimageviewとLabelを乗せるという構造です。
選手に名前をつける際は各選手のviewにTap Gesture Recognizerを追加しviewcontrollerと紐付けることでタッチすると編集画面に画面遷移させるようにしています。
選手を移動させる際はoverride func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {}を使って各選手のviewを移動させるようにしています。
そこで選手をドラッグだけしたい際にもTap Gesture Recognizerが反応してしまい、編集画面に画面遷移してしまう問題が発生しました。「タッチした際は編集画面に遷移」、「ドラッグした際はドラッグだけし、画面遷移をしない」をいう風にしたいです。どのような考え方で実装すればこの問題は解決できるでしょうか。
プログラミング初心者で言葉足らずであると思いますがご指摘お願いいたします。
該当のソースコード
swift
1 2@IBOutlet weak var rsbView: UIView! 3 4//画面遷移 5//rabtapはrsbviewに乗せているTap Gesture Recognizerから紐付け 6@IBAction func rsbtap(_ sender: Any) { 7 8 performSegue(withIdentifier: "toInputName", sender: nil) 9 10 } 11//ドラッグ 12//動いてる間の処理 13 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 14 //最初のタッチを受け取る 15 let touchevent = touches.first! 16 17 let old = touchevent.previousLocation(in: self.view) 18 let new = touchevent.location(in: self.view) 19 rsbView.frame.origin.x = rsbView.frame.origin.x + (new.x - old.x) 20 rsbView.frame.origin.y = rsbView.frame.origin.y + (new.y - old.y) 21 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/03 06:49