前提・実現したいこと
生成された1組のView1とView2を同時にpangestureで移動させたいです.
swift
1let panGesture = UIPanGestureRecognizer(target: self, action: #selector(self.moveView)) 2panGesture.delegate = self 3view1.addGestureRecognizer(panGesture) 4view1.isUserInteractionEnabled = true 5 6self.parent?.view.addSubview(view1) 7self.parent?.view.addSubview(view2)
のように,同じサイズ,座標のViewが親Viewにあります.
この動作は複数回繰り返されているので,親Viewにはこの動作によって
生成されたViewがいくつかあります.
そのため,
①gestureを検知したらview1に重なっているviewを取得
または,View1の座標からView2を取得(完全に重なっているものだけ)
②View1の座標変化とともにView2の座標も変える
を行いたいです.
よろしくおねがいします.
理想のコード
swift
1 @objc func moveView(sender: UIPanGestureRecognizer) { 2 //ここのsenderはView1 3 4 let location: CGPoint = sender.translation(in: parent!.view) 5 6 //view1と重なっているView2を取得したい 7 let view2 = ????? 8 9 view2.center.x += location.x 10 view2.center.y += location.y 11 12 sender.view?.center.x += location.x 13 sender.view?.center.y += location.y 14 15 16 sender.setTranslation(CGPoint.zero, in: self.view) 17 18 }
追記
親Viewの中にcontainerViewがあり,その中のImageViewを長押しすると
view1 view2が同じサイズ,位置,つまり,完全に重なった状態で親Viewに追加されます.
長押しは何回でも出来るのでview1とview2の1組は何個も親Viewに存在します.
イメージ図はこんな感じです ↓
![
このような感じで,
一回親に貼り付けられたview1とView2を一緒に動かしたいです.
ContainerViewのViewControllerは親Viewと異なります.
ContainerViewで,長押しを感知し,View1とView2を生成しています.
以下が該当コードです.
ContainerVC内で
swift
1 override func viewDidLoad() { 2 super.viewDidLoad() 3 //長押しをセット 4 let longPressGesture = 5 UILongPressGestureRecognizer(target: self, 6 action: #selector(self.longPress(_:))) 7 longPressGesture.delegate = self 8 self.imageView.addGestureRecognizer(longPressGesture) 9 } 10 11 //長押しされたら 12 @objc func longPress(_ sender: UILongPressGestureRecognizer){ 13 if sender.state == .began { 14 //View1 座標はランダム 15 view1 = UIImageView(frame: CGRect(x: x,y: y, width: 168, height: 90)) 16 let panGesture2 = UIPanGestureRecognizer(target: self, action: #selector(self.moveView)) 17 panGesture2.delegate = self 18 view1.addGestureRecognizer(panGesture2) 19 20 view1.isUserInteractionEnabled = true 21 22 //View2 Viewに重なるように表示 23 view2 = UIImageView(frame: CGRect(x: x,y: y, width: 168, height: 90)) 24 25 //Viewを追加 26 self.parent?.view.addSubview(view1) 27 self.parent?.view.addSubview(view2) 28 } 29 } 30 }
moveView()については上記の通りです.
pangestureをView1,2両方につけてもView2しか反応しない(VIew2が上にあるから?)ので
View1が動かされたときに対になっているView2を取得して
一緒に動かせばいいと考えたのですが,座標からViewを取得する方法がわからず・・・.
座標からというのは,
View1の中心がX,Yなので,中心が同じ他のVIewをview2にするような
イメージです.
ご教授お願いします.