objective c - How do I do a Fade/No transition between view controllers -
is possible fade in , fade out transition between view controllers in storyboard. or without transition.
if it's possible, what's code it?
if presenting modal view controller, can specify modaltransitionstyle
of uimodaltransitionstylecrossdissolve
. if doing segue in storyboard, select attributes inspector segue, , specify transition style there:
if presenting view controller programmatically, can define modal segue between view controllers in storyboard "transition" of "cross dissolve" , have source view controller perform segue:
[self performseguewithidentifier:@"presentsegue" sender:sender];
or, if calling presentviewcontroller
:
uiviewcontroller *controller = [self.storyboard instantiateviewcontrollerwithidentifier:@"yourstoryboardid"]; controller.modaltransitionstyle = uimodaltransitionstylecrossdissolve; [self presentviewcontroller:controller animated:yes completion:nil];
in ios 7, apple has provided new technology provides rich , robust control highly customized transitions. more information, refer wwdc 2013 video custom transitions using view controllers.
but, instance, if want customize push , pop animations in ios 7 fade, specify delegate
navigation controller
- (void)viewdidload { [super viewdidload]; self.navigationcontroller.delegate = self; }
you implement animationcontrollerforoperation
specified animator objects pushing , popping:
- (id<uiviewcontrolleranimatedtransitioning>)navigationcontroller:(uinavigationcontroller *)navigationcontroller animationcontrollerforoperation:(uinavigationcontrolleroperation)operation fromviewcontroller:(uiviewcontroller*)fromvc toviewcontroller:(uiviewcontroller*)tovc { if (operation == uinavigationcontrolleroperationpush) return [[pushanimator alloc] init]; if (operation == uinavigationcontrolleroperationpop) return [[popanimator alloc] init]; return nil; }
you'd have implement custom push , pop animators, such as:
@interface pushanimator : nsobject <uiviewcontrolleranimatedtransitioning> @end @implementation pushanimator - (nstimeinterval)transitionduration:(id <uiviewcontrollercontexttransitioning>)transitioncontext { return 0.5; } - (void)animatetransition:(id<uiviewcontrollercontexttransitioning>)transitioncontext { uiviewcontroller* toviewcontroller = [transitioncontext viewcontrollerforkey:uitransitioncontexttoviewcontrollerkey]; [[transitioncontext containerview] addsubview:toviewcontroller.view]; toviewcontroller.view.alpha = 0.0; [uiview animatewithduration:[self transitionduration:transitioncontext] animations:^{ toviewcontroller.view.alpha = 1.0; } completion:^(bool finished) { [transitioncontext completetransition:![transitioncontext transitionwascancelled]]; }]; } @end
and
@interface popanimator : nsobject <uiviewcontrolleranimatedtransitioning> @end @implementation popanimator - (nstimeinterval)transitionduration:(id <uiviewcontrollercontexttransitioning>)transitioncontext { return 0.5; } - (void)animatetransition:(id<uiviewcontrollercontexttransitioning>)transitioncontext { uiviewcontroller* toviewcontroller = [transitioncontext viewcontrollerforkey:uitransitioncontexttoviewcontrollerkey]; uiviewcontroller* fromviewcontroller = [transitioncontext viewcontrollerforkey:uitransitioncontextfromviewcontrollerkey]; [[transitioncontext containerview] insertsubview:toviewcontroller.view belowsubview:fromviewcontroller.view]; [uiview animatewithduration:[self transitionduration:transitioncontext] animations:^{ fromviewcontroller.view.alpha = 0.0; } completion:^(bool finished) { [transitioncontext completetransition:![transitioncontext transitionwascancelled]]; }]; } @end
there similar, different technique customizing modal transitions, (though if doing face, you'd use modaltransitionstyle
discussed above unless there other subtle customization wanted employ). see aforementioned custom transitions using view controllers more information.
bottom line, custom transitions ios 7 complicated, robust way provide tremendous control on animations transitions.
Comments
Post a Comment