前提・実現したいこと
Button1をドラッグしてドロップした位置がButton2上だったら実行する処理を書きたいです。
発生している問題
ドロップ時(指を離した時)の処理の書き方がわかりません。
該当のソースコード
Swift
1 2import UIKit 3 4class ViewController: UIViewController { 5 6 var button1x: CGFloat? 7 var button1y: CGFloat? 8 var button2x: CGFloat? 9 var button2y: CGFloat? 10 11 @IBOutlet weak var nowLabel: UILabel! 12 13 @IBOutlet weak var button1: UIButton! 14 @IBOutlet weak var button2: UIButton! 15 16 @IBOutlet weak var button1ConterX: NSLayoutConstraint! 17 @IBOutlet weak var button1ConterY: NSLayoutConstraint! 18 19 override func viewDidLoad() { 20 super.viewDidLoad() 21 22 button2x = button2.frame.origin.x 23 button2y = button2.frame.origin.y 24 } 25 26 @IBAction func button1Pan(_ sender: UIPanGestureRecognizer) { 27 28 //移動量を取得する。 29 let move:CGPoint = sender.translation(in: view) 30 31 //button1の位置の制約に移動量を加算する。 32 button1ConterX.constant += move.x 33 button1ConterY.constant += move.y 34 35 //画面表示を更新する。 36 view.layoutIfNeeded() 37 38 //変数に現在座標を入れる 39 button1x = sender.view!.frame.origin.x 40 button1y = sender.view!.frame.origin.y 41 42 nowLabel.text = "ドラッグ中です" 43 44 //移動量を0にする。 45 sender.setTranslation(CGPoint(x: 0, y: 0), in:view) 46 } 47 48 /* ドロップ時に書きたい処理 49 if button2x!-30 < button1x! && button2x!+30 > button1x! && 50 button2y!-30 < button1y! && button2y!+30 > button1y! { 51 nowLabel.text = "button2上でドロップしました" 52 } else { 53 nowLabel.text = "ドロップしました" 54 } 55 */ 56 57} 58
試したこと
ドラッグ時、何をドラッグしているのかわかるようにしたかったので、Button1にUIPanGestureRecognizerをつけました。しかし、ドロップ時の処理がわかりませんでした。
(ソースコードはその時のものです。)
なので、UIPanGestureRecognizerはあきらめて、ドラッグ中何をつかんでいるのか分からなくなってしまうのですが、TouchUpOutsideを使いました。しかし、指を離した位置の座標の取得方法がわかりませんでした。
(Button1はTouchUpOutsideを使いたかったのでButtonにしました。LabelでもImageでも大丈夫です。)
補足情報(FW/ツールのバージョンなど)
Xcode12.3
swift5.3.2
回答1件
あなたの回答
tips
プレビュー