Entrevista olegario vazquez aldirma

Since this question mentions iOS 7 I'm quite surprised the answer doesn't mention the Animated Transitions API introduced in iOS 7.

If you want to get straight into GitHub the objc.io guys have a great post with a linked project here

Take a look at the documentation and you will see the following:

@availability(iOS, introduced=7.0) optional func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?

Or in Objective-C

- (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController )navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController )fromVC toViewController:(UIViewController )toVC NS_AVAILABLE_IOS(7_0);

What this means is that from iOS 7 you can control how the navigation controller implements its animations for pushes and pops.

All that is needed is for you to set the delegate of the navigation controller and vend the correct animator object when appropriate. So lets get started:

1. Set the UINavigationControllerDelegate

I typically like to have an App-Wide Navigation Coordinator that manages all my transitions etc. So ideally you want some object that will be alive for the duration of the NavigationController. So we might have a coordinator that looks like this:

class NavigationCoordinationController: NSObject { private(set) var navigationController:UINavigationController required init(navigationController: UINavigationController) { self.navigationController = navigationController super.init() navigationController.delegate = self } }

I typically create this in the App Delegate so it can be referenced anywhere. You could also set the delegate on a per view controller basis, creating a custom UINavigationController subclass, or wherever you see fit.

2. Create A Custom Animator

Now we need an object that conforms to the UIViewControllerAnimatedTransitioning protocol. This object will be called upon to apply the animation whenever an animated transition is needed. This example is a simple animation that fades and expands the fromView in the transition so its relevant for a Push.

class CustomPushExpansionTransitioner: NSObject, UIViewControllerAnimatedTransitioning { func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { return 1 } func animateTransition(transitionContext: UIViewControllerContextTransitioning) { let fromView: UIView = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey)! let toView: UIView = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey)! let container = transitionContext.containerView() container.addSubview(toView) container.bringSubviewToFront(fromView) toView.frame = container.convertRect(fromView.bounds, fromView: fromView) UIView.animateWithDuration(transitionDuration(transitionContext), animations: { () -> Void in fromView.alpha = 0 fromView.transform = CGAffineTransformConcat(fromView.transform, CGAffineTransformMakeScale(1.3, 1.3)) }) { (complete) -> Void in transitionContext.completeTransition(true) } } }

3. Vend The Animator Where Necessary

Now we need to implement the UINavigationController delegate and vend our custom animator when needed.

extension NavigationCoordinationController: UINavigationControllerDelegate { func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { switch operation { case .Push: return LaunchToHomeTransitioner() case .Pop: break case .None: break } return nil } }

And there you go, you now have total control over your UINavigationController transitions




Related news

Circuit motocross belgique helecine
Noyau interphasique ppt airport
Bombes atomique sur hiroshima et nagasaki
Mar saura bloguera de moda
Code promo modatoi glamour
Espiritus de tomar que contienen los ostiones
What to wear to air force awards banquet
Caldeirao do huque
Histoire politique contemporaine course