2016-02-05 11 views
12

Ich versuche, eine UIView auf der Schiebegeste von ihrer Anfangsposition zu einer festen Endposition zu bewegen. Das Bild sollte sich mit der Handbewegung bewegen und nicht unabhängig voneinander animieren.Swift: Verschiebe UIView auf Schiebegeste.

Ich habe nichts versucht, da ich keine Ahnung habe, wo ich anfangen soll, welche Gestenklasse zu verwenden ist.

enter image description here

Antwort

16

tat es schließlich wie unten.

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

die folgende Funktion aufgerufen wird, wenn die Geste erkannt wird, (hier bin ich die Einschränkung der Ansicht, die einen maximalen centre.y von 555 zu haben, & ich das Zurücksetzen dieser Stelle wieder auf 554, wenn die Ansicht bewegt Vergangenheit)

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

Funktioniert gut :) – Bharathi

+0

Was braucht Delegat in Ihrem Code ??? – SPatel

5

Sie wollen wahrscheinlich ein UIPanGestureRecognizer verwenden.

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

und das Objekt nur entlang der y-Achse zu ziehen:

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

OK, werde ich dies ein Schuss. Vielen Dank. – Rao

+0

Yup, verstanden. Ich werde versuchen es dich wissen zu lassen. – Rao

2

Update für Swift 3.x

Wenn die Auswahl Zuweisung hat die Syntax geändert und erfordert jetzt #selector

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

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

Funktion Umsetzung:

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 

} 
Verwandte Themen