可拖动的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") } } 

他们也有重力。 forms是正方形和圆形。

说明:在.began – 我禁用所选forms的重力。 在.changed – 我尝试改变坐标。 在.end – 我再次启用重力。

屏幕截图。

在这里输入图像说明

在这里输入图像说明

参考链接Swift 3.0中的PanGesture

步骤1 :在storyBoard上拖一个你想要拖动的View。

 @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

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) } 

希望这会帮助别人。