Hi I checked many questions regarding swiping in SO but have doubts .
In my app I have two pages 1. user view controller 2. question view controller
user page l
You can achieve this using Auto-layout and Swipe Gesture. Tricky part is setting constraints to your view. Add a negative of height constant constraint to your view so that it does not show in view.
@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
Than in your 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
}
And methods to swipe 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")
}
First you'll have to add a UIPanGestureRecognizer
to your "questions bar" so you can pan it to show the questions view.
To handle multiple view controllers, you can use a container view controller:
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
}
}
Something like this. This is all typed manually so there might be some mistakes.