I have an app with a navigation bar consisting of 2 bar buttons. I would like to hide and show this navigation bar when a user double taps the screen.
Initially, the navigation bar should be hidden. When a user double taps the screen, the navigation bar should come up with an animation, like what can be seen in the iPhone's photo gallery.
How can i do something this? Suggestions are always appreciated.
This isn't something that can fit into a few lines of code, but this is one approach that might work for you.
To hide the navigation bar:
[[self navigationController] setNavigationBarHidden:YES animated:YES];
To show it:
[[self navigationController] setNavigationBarHidden:NO animated:YES];
Documentation for this method is available here.
To listen for a "double click" or double-tap, subclass
UIView and make an instance of that subclass your view controller's
In the view subclass, override its
-touchesEnded:withEvent: method and count how many touches you get in a duration of time, by measuring the time between two consecutive taps, perhaps with
-timeIntervalSinceDate:. Or test the result from
If you get two taps, your subclassed view issues an
NSNotification that your view controller has registered to listen for.
When your view controller hears the notification, it fires a selector that either hides or shows the navigation bar using the aforementioned code, depending on the navigation bar's current visible state, accessed through reading the navigation bar's
The part of my answer for handling tap events is probably useful back before iOS 3.1. The
UIGestureRecognizer class is probably a better approach for handling double-taps, these days.
The Swift way to hide the navigation bar is:
self.navigationController?.setNavigationBarHidden(true, animated: true)
To show it:
self.navigationController?.setNavigationBarHidden(false, animated: true)