大佬教程收集整理的这篇文章主要介绍了ios – 自定义Segue动画,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试将pushViewController设置为完成块,但转换不会完全执行.
- (void)perform { UIViewController *sourceViewController = (UIViewController *) self.sourceViewController; UIViewController *desTinationViewController = (UIViewController *) self.desTinationViewController; [desTinationViewController.view setTransform:CGAffineTransformMakeScale(0.5,0.5)]; [desTinationViewController.view setAlpha:0.0]; [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaSEOut animations:^{ [desTinationViewController.view setTransform:CGAffineTransformMakeScale(1.0,1.0)]; [desTinationViewController.view setAlpha:1.0]; [sourceViewController.navigationController pushViewController:desTinationViewController animated:NO]; } completion:^(BOOL finished){ }]; }
我做错了什么?
[sourceViewController.view addSubview:desTinationViewController.view]; [desTinationViewController.view setFrame:sourceViewController.view.window.frame]; [desTinationViewController.view setTransform:CGAffineTransformMakeScale(0.5,0.5)]; [desTinationViewController.view setAlpha:1.0]; [UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationCurveEaSEOut animations:^{ [desTinationViewController.view setTransform:CGAffineTransformMakeScale(1.0,1.0)]; [desTinationViewController.view setAlpha:1.0]; } completion:^(BOOL finished){ [desTinationViewController.view removeFromSuperview]; [sourceViewController.navigationController pushViewController:desTinationViewController animated:NO]; }];
注意,有效的iOS 7,您将使用自定义转换.有关更多信息,请参阅WWDC 2013 Custom Transitions Using View Controllers.
例如,如果尝试使用导航控制器进行自定义转换,则第一个视图控制器将自己指定为导航控制器的代理:
self.navigationController.delegate = self;
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC { if (operation == UINavigationControllerOperationPush) { return [[PushAnimator alloc] init]; } else { return [[PopAnimator alloc] init]; } }
那么你显然会实现这些动画师:
@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]; UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; [[transitionContext containerView] addSubview:toViewController.view]; toViewController.view.frame = fromViewController.view.frame; toViewController.view.transform = CGAffineTransformMakeScale(0.5,0.5); toViewController.view.alpha = 0.0; [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 options:0 animations:^{ toViewController.view.transform = CGAffineTransformIdentity; toViewController.view.alpha = 1.0; } completion:^(BOOL finished) { [fromViewController.view removeFromSuperview]; [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; }]; } @end
和
@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]; toViewController.view.frame = fromViewController.view.frame; [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0.0 options:0 animations:^{ fromViewController.view.transform = CGAffineTransformMakeScale(0.5,0.5); fromViewController.view.alpha = 0.0; } completion:^(BOOL finished) { [fromViewController.view removeFromSuperview]; [transitionContext completeTransition:![transitionContext transitionWasCancelled]]; }]; } @end
以上是大佬教程为你收集整理的ios – 自定义Segue动画全部内容,希望文章能够帮你解决ios – 自定义Segue动画所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。