iOS --- 自定义过渡
2015-11-24 16:23
447 查看
iOS7支持两种自定义过渡: 自定义视图控制器过渡和交互式视图控制器过渡。
过渡协调器(transitionCoordinator):所有的过渡都会创建一个过渡协调器。
自定义视图过渡:UIViewControllerAnimatedTransitioning
交互控制器:UIViewControllerInteractiveTransitioning
交互控制器实现了 UIViewControllerInteractiveTransitioning的协议。交互式过渡的交互控制器应当是UIPercentDrivenInteractiveTransition的子类;
UIViewControllerAnimatedTransitioning
: 交互式过渡不支持CATransiton或CALayer动画。
RMPZoomTransitionAnimator的使用:
Push&Pop
1、 实现UINavigationControllerDelegate协议 RMPZoomTransitionAnimating协议
2、 #import "RMPZoomTransitionAnimator.h"
Pre&Diss 模态样式
1、 实现UINavigationControllerDelegate协议 RMPZoomTransitionAnimating协议
2、 #import "RMPZoomTransitionAnimator.h"
RMPZoomTransitionAnimator代理事件同上。
过渡协调器(transitionCoordinator):所有的过渡都会创建一个过渡协调器。
自定义视图过渡:UIViewControllerAnimatedTransitioning
- (NSTimeInterval)transitionDuration:(nullable id <UIViewControllerContextTransitioning>)transitionContext { //系统动画花费的时间 } - (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext { UIViewController *src = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey]; UIViewController *dest = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey]; //真正的动画代码 [transitionContext completeTransition:YES]; } //动画完成之后,调用completeTransition:方法通知系统过渡完成
交互控制器:UIViewControllerInteractiveTransitioning
- (void)startInteractiveTransition:(id <UIViewControllerContextTransitioning>)transitionContext;
交互控制器实现了 UIViewControllerInteractiveTransitioning的协议。交互式过渡的交互控制器应当是UIPercentDrivenInteractiveTransition的子类;
- (void)updateInteractiveTransition:(CGFloat)percentComplete; - (void)cancelInteractiveTransition; - (void)finishInteractiveTransition;
UIViewControllerAnimatedTransitioning
//动画控制器 - (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source; - (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed; //交互控制器 - (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation:(id <UIViewControllerAnimatedTransitioning>)animator; - (nullable id <UIViewControllerInteractiveTransitioning>)interactionControllerForDismissal:(id <UIViewControllerAnimatedTransitioning>)animator;
: 交互式过渡不支持CATransiton或CALayer动画。
RMPZoomTransitionAnimator的使用:
Push&Pop
1、 实现UINavigationControllerDelegate协议 RMPZoomTransitionAnimating协议
2、 #import "RMPZoomTransitionAnimator.h"
#pragma mark - <UINavigationControllerDelegate> - (id <UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController animationControllerForOperation:(UINavigationControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC { id <RMPZoomTransitionAnimating, RMPZoomTransitionDelegate> sourceTransition = (id<RMPZoomTransitionAnimating, RMPZoomTransitionDelegate>)fromVC; id <RMPZoomTransitionAnimating, RMPZoomTransitionDelegate> destinationTransition = (id<RMPZoomTransitionAnimating, RMPZoomTransitionDelegate>)toVC; if ([sourceTransition conformsToProtocol:@protocol(RMPZoomTransitionAnimating)] && [destinationTransition conformsToProtocol:@protocol(RMPZoomTransitionAnimating)]) { RMPZoomTransitionAnimator *animator = [[RMPZoomTransitionAnimator alloc] init]; animator.goingForward = (operation == UINavigationControllerOperationPush); animator.sourceTransition = sourceTransition; animator.destinationTransition = destinationTransition; return animator; } return nil; }
#pragma mark -<RMPZoomTransitionAnimating> //过渡图片 - (UIImageView *)transitionSourceImageView { UIImage *image = [UIImage imageNamed:@"图片名"]; UIImageView *imageView = [[UIImageView alloc] initWithImage:image]; imageView.contentMode = 过渡图片.contentMode; imageView.clipsToBounds = YES; imageView.userInteractionEnabled = NO; imageView.frame = 过渡图片.frame; return imageView; } - (UIColor *)transitionSourceBackgroundColor { return self.view.backgroundColor; } - (CGRect)transitionDestinationImageViewFrame { return 过渡图片.frame;; } //返回pop VC #pragma mark - <RMPZoomTransitionDelegate> - (void)zoomTransitionAnimator:(RMPZoomTransitionAnimator *)animator didCompleteTransition:(BOOL)didComplete animatingSourceImageView:(UIImageView *)imageView { self.mainImageView.image = imageView.image; }
Pre&Diss 模态样式
1、 实现UINavigationControllerDelegate协议 RMPZoomTransitionAnimating协议
2、 #import "RMPZoomTransitionAnimator.h"
#pragma mark - <UIViewControllerTransitioningDelegate> - (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source { id <RMPZoomTransitionAnimating, RMPZoomTransitionDelegate> sourceTransition = (id<RMPZoomTransitionAnimating, RMPZoomTransitionDelegate>)source; id <RMPZoomTransitionAnimating, RMPZoomTransitionDelegate> destinationTransition = (id<RMPZoomTransitionAnimating, RMPZoomTransitionDelegate>)presented; if ([sourceTransition conformsToProtocol:@protocol(RMPZoomTransitionAnimating)] && [destinationTransition conformsToProtocol:@protocol(RMPZoomTransitionAnimating)]) { RMPZoomTransitionAnimator *animator = [[RMPZoomTransitionAnimator alloc] init]; animator.goingForward = YES; animator.sourceTransition = sourceTransition; animator.destinationTransition = destinationTransition; return animator; } return nil; } - (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed { id <RMPZoomTransitionAnimating, RMPZoomTransitionDelegate> sourceTransition = (id<RMPZoomTransitionAnimating, RMPZoomTransitionDelegate>)dismissed; id <RMPZoomTransitionAnimating, RMPZoomTransitionDelegate> destinationTransition = (id<RMPZoomTransitionAnimating, RMPZoomTransitionDelegate>)self; if ([sourceTransition conformsToProtocol:@protocol(RMPZoomTransitionAnimating)] && [destinationTransition conformsToProtocol:@protocol(RMPZoomTransitionAnimating)]) { RMPZoomTransitionAnimator *animator = [[RMPZoomTransitionAnimator alloc] init]; animator.goingForward = NO; animator.sourceTransition = sourceTransition; animator.destinationTransition = destinationTransition; return animator; } return nil; }
RMPZoomTransitionAnimator代理事件同上。
相关文章推荐
- Runtime的理解
- 使用CocoaPods来管理iOS项目的依赖库
- 如何解决键盘遮挡输入框问题
- iOS消息推送机制
- ios核心动画(基础动画)
- iOS切换window根控制器
- IOS开发笔记之三十——一个double精度导致的bug
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- iOS--优化--保持界面流畅的技巧
- iOS深入学习(Block全面分析)
- iOS证书
- iOS 的页面刷新技术(block,通知)和MVC模型
- iOS 官方文档CALayer
- iOS之 随笔Xcode7的lipo
- iOS开发 底层抛析运行循环—— RunLoop
- iOS开发学习总结
- IOS 自定义转场动画。
- iOS 数据缓存
- iOS应用性能调优
- iOS中Block介绍(二)内存管理与其他特性