2016-01-27 8 views
6

Hallo Ich habe viele Fragen zum Swipen in SO überprüft, habe aber Zweifel.swift: Zeige einen anderen View-Controller auf Swipe in der ersten Ansicht Controller

In meiner app Ich habe zwei Seiten 1. Benutzer-View-Controller 2. Frage View-Controller

Benutzerseite sieht wie folgt aus userpage

jetzt, was ich umsetzen möchte, ist Fragen Controller anzuzeigen zeigen während Sie den Benutzerbildschirm von unten nach oben streichen.

Ich bin neu in Ios, also hilf mir dabei.

edit:

das Problem ist, während nur swiping bis sie beginnen sollte den anderen View-Controller zeigt. wenn ich bis Mitte des Bildschirms mit dem Finger noch berührt den Bildschirm geklaut, dann sollte es 2 Ansicht zeigen controllers.can ich dies mit Push/Pop erreichen wie diese

enter image description here

+0

Hallo, wie pro Sie hinterfragen, versuchen, eine Streichgeste Erkenner mit einer Richtung hinzuzufügen, auf dem Beim Swipe-Versuch versuchen, den neuen Bildschirm zu drücken/zu öffnen. –

+0

@Gagan_iOS hallo danke für die Antwort, das Problem ist während des Wischens nur es sollte beginnen, den anderen View-Controller zu zeigen. Wenn ich bis zur Mitte des Bildschirms wischete, während mein Finger immer noch den Bildschirm berührte, sollte es 2 View-Controller anzeigen. Das erreiche ich mit Push/Pop –

+0

Klingt eher nach einem 'UIPanGestureRecognizer'. – Eendje

Antwort

0

Zuerst musst du hinzufügen a UIPanGestureRecognizer zu Ihrer "Fragenleiste", so dass Sie sie verschieben können, um die Fragenansicht anzuzeigen.

mehr View-Controller umgehen, können Sie einen Container-View-Controller verwenden:

var pendingViewController: UIViewController? { 
    didSet { 
     if let pending = pendingViewController { 
      addChildViewController(pending) 
      pending.didMoveToParentViewController(self) 

      pending.view.frame.origin.y = UIScreen.mainScreen().bounds.height 

      view.addSubview(pending.view) 
     } 
    } 
} 

var currentViewController: UIViewController? { didSet { pendingViewController = nil } } 

func showQuestions(recognizer: UIPanGestureRecognizer) { 
    if recognizer.state == .Began { 
     let controller = QuestionViewController() // create instance of your question view controller 
     pendingViewController = controller 
    } 

    if recognizer.state == .Changed { 
     let translation = recognizer.translationInView(view) 

     // Insert code here to move whatever you want to move together with the question view controller view 

     pendingViewController.view.center.y += translation.y 
     recognizer.setTranslation(CGPointZero, inView: view) 
    } 

    if recognizer.state == .Ended { 
     // Animate the view to it's location 
    } 
} 

Etwas ähnliches. Dies wird manuell eingegeben, so dass es zu Fehlern kommen kann.

1

Sie können dies mit Auto-Layout und Swipe-Geste erreichen. Tricky Teil setzt Einschränkungen für Ihre Ansicht. Fügen Sie Ihrer Ansicht ein Negativ der Konstanten der Höhenkonstante hinzu, so dass es nicht in der Ansicht angezeigt wird.

@IBOutlet weak var yourViewBottomConstraint: NSLayoutConstraint! //Create IBOutlet of bottom Contraint to YourView 

let swipeUp = UISwipeGestureRecognizer() // Swipe Up gesture recognizer 
let swipeDown = UISwipeGestureRecognizer() // Swipe Down gesture recognizer OR You can use single Swipe Gesture 

als in Ihrem viewDidLoad()

Override func viewDidLoad() { 
// Swipe Gesture 
     swipeUp.direction = UISwipeGestureRecognizerDirection.up 
     swipeUp.addTarget(self, action: "swipedViewUp") 
     drawerButton.addGestureRecognizer(swipeUp) // Or assign to view 

     swipeDown.direction = UISwipeGestureRecognizerDirection.down 
     swipeDown.addTarget(self, action: "swipedViewDown") 
     drawerButton.addGestureRecognizer(swipeDown) // Or assign to view 
} 

und Methoden, um Swipe Ansicht

// Toggle Swipe Action for imagesContainer 
func swipedViewUp(){ 

    self.yourViewBottomConstraint.constant = +90 // Or set whatever value 

    print("Swiped Up") 
} 

func swipedViewDown(){ 

    self.yourViewBottomConstraint.constant = -90 // Or Set whatever value 


    print("Swiped Down") 
}