Перетаскиваемый 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")
}
}
также у них есть гравитация. Формы-это квадраты и круги.
объяснение: в.началось-отключаю гравитацию для выбранной формы. в.изменилось - я пытаюсь изменить координаты. в.end-я снова включаю серьезность.
скриншот.
2 ответов
Шаг 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 : выход.
использовать ниже код для 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)
}
надеюсь, это поможет кому-то.