2016-02-05 4 views
12

Я пытаюсь переместить UIView на жест слайдов от его исходного положения до фиксированной конечной позиции. Изображение должно двигаться жестом руки и не анимироваться независимо.Swift: переместите UIView на жест слайдов

Я ничего не пробовал, так как я понятия не имею, с чего начать, какой класс жестов использовать.

enter image description here

ответ

16

Наконец сделал это, как показано ниже.

let gesture = UIPanGestureRecognizer(target: self, action: Selector("wasDragged:")) 
slideUpView.addGestureRecognizer(gesture) 
slideUpView.userInteractionEnabled = true 
gesture.delegate = self 

Следующая функция вызывается, когда жест обнаруживается, (здесь я ограничение вид иметь максимальную centre.y 555, & я сбросить обратно до 554, когда представление движется мимо этой точки)

func wasDragged(gestureRecognizer: UIPanGestureRecognizer) { 
    if gestureRecognizer.state == UIGestureRecognizerState.Began || gestureRecognizer.state == UIGestureRecognizerState.Changed { 
     let translation = gestureRecognizer.translationInView(self.view) 
     print(gestureRecognizer.view!.center.y) 
     if(gestureRecognizer.view!.center.y < 555) { 
      gestureRecognizer.view!.center = CGPointMake(gestureRecognizer.view!.center.x, gestureRecognizer.view!.center.y + translation.y) 
     }else { 
      gestureRecognizer.view!.center = CGPointMake(gestureRecognizer.view!.center.x, 554) 
     } 

     gestureRecognizer.setTranslation(CGPointMake(0,0), inView: self.view) 
    } 

} 
+0

Работает отлично :) – Bharathi

+0

Что нужно делегату в вашем коде ??? – SPatel

5

Вы, вероятно, хотите использовать UIPanGestureRecognizer.

let gesture = UIPanGestureRecognizer(target: self, action: Selector("wasDragged:")) 
customView.addGestureRecognizer(gesture) 
gesture.delegate = self 

и перетащить объект только вдоль оси у:

func wasDragged(gesture: UIPanGestureRecognizer) { 
    let translation = gesture.translationInView(self.view) 

    // Use translation.y to change the position of your customView, e.g. 
    customView.center.y = translation.y // Customize this. 
} 
+0

Хорошо, я дам этому выстрел. Благодарю. – Rao

+0

Yup, понял. Я попробую и дам вам знать. – Rao

2

Обновление для Swift 3.х

При назначении селектор, синтаксис изменился, и теперь требует #selector

let gesture = UIPanGestureRecognizer(target: self, action: #selector(navViewDragged(gesture:))) 

    self.navLayoutView.addGestureRecognizer(gesture) 
    self.navLayoutView.isUserInteractionEnabled = true 
    gesture.delegate = self 

реализация функции:

func navViewDragged(gesture: UIPanGestureRecognizer){ 
    //Code here 
} 
-1
@IBAction func handlePanGesture(_ recognizer: UIPanGestureRecognizer) { 

    if MainView.bounds.contains(mainImage.frame) { 
     let recognizerCenter = recognizer.location(in: MainView) 

     mainImage.center = recognizerCenter 
    } 

    if MainView.bounds.intersection(mainImage.frame).width > 50 && MainView.bounds.intersection(mainImage.frame).height > 0 { 
     let recognizerCenter = recognizer.location(in: MainView) 
     print(recognizerCenter) 
     mainImage.center = recognizerCenter 
    } 

} 

@IBAction func handlePinchGesture(_ recognizer: UIPinchGestureRecognizer) { 

    mainImage.transform = mainImage.transform.scaledBy(x: recognizer.scale, y: recognizer.scale) 
    recognizer.scale = 1.0 
} 

@IBAction func handleRotateGesture(_ recognizer: UIRotationGestureRecognizer) { 

    mainImage.transform = mainImage.transform.rotated(by: recognizer.rotation) 
    recognizer.rotation = 0.0 

} 
Смежные вопросы