web-dev-qa-db-ja.com

ドラッグ可能なUIView Swift 3

画面上のオブジェクトをドラッグできるようにしたいのですが、できません。私はすべてを試しましたが、それでもできません。

コードは次のとおりです。

func panGesture(gesture: UIPanGestureRecognizer) {
    switch gesture.state {
    case .began:
        print("Began.")
        for i in 0..<forms.count {
            if forms[i].frame.contains(gesture.location(in: view)) {
                gravity.removeItem(forms[i])
            }
        }
    case .changed:
        let translation = gesture.translation(in: forms[1])

        gesture.view!.center = CGPoint(x: gesture.view!.center.x + translation.x, y: gesture.view!.center.y + translation.y)

        gesture.setTranslation(CGPoint.zero, in: self.view)

        print("\(gesture.view!.center.x)=\(gesture.view!.center.y)")
        print("t;: \(translation)")
    case .ended:
        for i in 0..<forms.count {
            if forms[i].frame.contains(gesture.location(in: view)) {
                gravity.addItem(forms[i])
            }
        }
        print("Ended.")
    case .cancelled:
        print("Cancelled")
    default:
        print("Default")
    }
}

また、重力があります。フォームは正方形と円です。

説明:.beganで-選択したフォームの重力を無効にします。 in .changed-座標を変更しようとします。 in .end-重力を再び有効にします。

スクリーンショット。

enter image description here

enter image description here

17
Dpetrov

ステップ1:storyBoardでドラッグするビューを1つ取得します。

@IBOutlet weak var viewDrag: UIView!

ステップ2:PanGestureを追加します。

var panGesture       = UIPanGestureRecognizer()

ステップ3:ViewDidLoadで以下のコードを追加します。

override func viewDidLoad() {
    super.viewDidLoad()

    panGesture = UIPanGestureRecognizer(target: self, action: #selector(ViewController.draggedView(_:)))
    viewDrag.isUserInteractionEnabled = true
    viewDrag.addGestureRecognizer(panGesture)

}

ステップ4:draggedViewのコード。

func draggedView(_ sender:UIPanGestureRecognizer){
    self.view.bringSubview(toFront: viewDrag)
    let translation = sender.translation(in: self.view)
    viewDrag.center = CGPoint(x: viewDrag.center.x + translation.x, y: viewDrag.center.y + translation.y)
    sender.setTranslation(CGPoint.zero, in: self.view)
}

ステップ5:出力。

GIF

73
Kirit Modi

Swift 2.3

@IBOutlet weak var viewDrag: UIView!
var panGesture = UIPanGestureRecognizer()

ViewDidLoadに以下のコードを追加します。

override func viewDidLoad() {
super.viewDidLoad()
 var panGesture = UIPanGestureRecognizer(target: self, action:("draggedView:"))
 viewDrag.userInteractionEnabled = true
 viewDrag.addGestureRecognizer(panGesture)
}

func draggedView(sender:UIPanGestureRecognizer){
    self.view.bringSubviewToFront(viewDrag)
    let translation = sender.translationInView(self.view)
    viewDrag.center = CGPoint(x: viewDrag.center.x + translation.x, y: viewDrag.center.y + translation.y)
    sender.setTranslation(CGPoint.zeroPoint, inView: self.view)
}

これが誰かを助けることを願っています。

1
Dilip Tiwari