2016-01-27 152 views
6

嗨我檢查了許多關於在這裏刷卡的問題,但有疑問。swift:在第一個視圖控制器中向上滑動顯示另一個視圖控制器

在我的應用我有兩頁 1.用戶視圖控制器 2.問題視圖控制器

用戶頁面看起來像這樣 userpage

現在我想實現是顯示問題視圖控制器同時從底部向上滑動用戶屏幕。

我是Ios的新手,所以幫助我實現這一點。

編輯:

問題而向上滑動只應該開始顯示其他視圖控制器。如果我刷卡,直到我的手指仍然觸摸屏幕,屏幕的中間,那麼它應該顯示2視圖controllers.can我實現這樣的

enter image description here

+0

嗨,按你的問題,嘗試添加輕掃手勢識別器對方向你查看和滑動嘗試推/彈出新的屏幕。 –

+0

@Gagan_iOS您好,感謝您的回覆,問題是在向上滑動時,它應該開始顯示其他視圖控制器。如果我用手指仍然觸摸屏幕,直到屏幕中間滑動,那麼它應該顯示2個視圖控制器。我可以使用push/pop來實現此效果。 –

+0

聽起來更像是需要'UIPanGestureRecognizer'。 – Eendje

回答

0

首先使用這種推/彈出你就必須添加一個UIPanGestureRecognizer到您的「問題欄」,以便您可以平移它以顯示問題視圖。

要處理多個視圖控制器,你可以使用一個容器視圖控制器:

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

這樣的事情。這些都是手動輸入的,所以可能會出現一些錯誤。

1

您可以使用自動佈局和滑動手勢來實現此目的。棘手的部分是爲您的視圖設置約束。將高度常數約束的負值添加到視圖中,以使其不會顯示在視圖中。

@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 

不是在您的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 
} 

和方法刷卡視圖

// 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") 
} 
相關問題