MacOS Catalina 10.15.4
Xcode 11.6
Swift version 4
先日こちらで質問させて頂き、Storyboardに設定している1つのラベルをドラッグして動かす方法をご教示頂きました。
そこから少し発展させて、ボタンでラベルを生成して、それぞれをドラッグ動かしたいです。
うんうん悩みながらやってみたこととしては、生成したラベルを配列に組み込み、それぞれにUIPanGestureRecognizer
を付与してみたのですが、生成した1つ目のラベルしか動かせず、イメージ通りにいきません。
大変恐縮ながら、良い書き方をご教示頂けませんでしょうか。
何卒宜しくお願い致します。
Swift4
1import UIKit 2 3 class ViewController: UIViewController{ 4 5 //ラベル配列を準備 6 var labelarray : [UILabel] = [] 7 8 @IBOutlet weak var label: UILabel! 9 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 } 14 15 //Labelを生成するFunc 16 func createseat(){ 17 18 var label = UILabel() 19 label.backgroundColor = UIColor.white 20 label.layer.borderWidth = 2 21 labelarray.append(label) 22 23 //カバーの座標とサイズを設定 24 label.frame = CGRect(x: 50*labelarray.count, 25 y: 50*labelarray.count, 26 width: 100, 27 height: 100) 28 29 // "UIPanGestureRecognizer"を生成し、ラベルに登録 30 let panGetsture = UIPanGestureRecognizer(target: self, action: #selector(panAction)) 31 label.addGestureRecognizer(panGetsture) 32 33 // 以下の処理を入れることでタッチ許可する 34 label.isUserInteractionEnabled = true 35 36 //viewにカバーを追加 37 self.view.addSubview(label) 38 39 } 40 41 // ラベルドラッグ時処理 42 @objc func panAction(sender: UIPanGestureRecognizer) { 43 44 45 for n in 0..<labelarray.count{ 46 47 // ラベルをドラッグした量だけ動かす 48 //ここの(in:...)の引数をどう指定すれば良い変わらず、苦し紛れに配列を使用しました 49 let point: CGPoint = sender.translation(in: labelarray[n] ) 50 let movedPoint = CGPoint(x:labelarray[n].center.x + point.x, y:labelarray[n].center.y + point.y) 51 labelarray[n].center = movedPoint 52 53 // ドラッグで移動した距離をリセット 54 sender.setTranslation(CGPoint.zero, in: labelarray[n]) 55 56 } 57 } 58 59 60 61 //ボタンを押してラベルを生成 62 @IBAction func setseat(_ sender: Any) { 63 64 createseat() 65 66 } 67 68 69 } 70
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/07 03:12
2020/08/07 08:57
2020/08/08 05:13