定制转场动画ControllerTransitionAnimation

说明

控制器转场动画的实现晦涩难懂,本人仅在这里实现了非实时(不支持边缘拖拽手势)的转场动画效果,支持实时转换的转场动画还在研究当中.

效果

源码

https://github.com/YouXianMing/ControllerTransitionAnimation

//
//  VirtualAnimator.h
//  Transition
//
//  Created by YouXianMing on 15/5/19.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface VirtualAnimator : NSObject <UIViewControllerAnimatedTransitioning>

/**
 *  动画执行时间(默认值为0.5s)
 */
@property (nonatomic) NSTimeInterval  transitionDuration;

/**
 *  <建议此方法用子类重载实现来设定时间>
 *
 *  设定转场动画持续时间
 *
 *  @param transitionContext 操作句柄
 *
 *  @return 设定的时间
 */
- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 *  <此方法必须由子类重载实现>
 *
 *  转场动画实现
 *
 *  @param transitionContext 操作句柄
 */
- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 *  获取fromViewController的view
 *
 *  @param transitionContext 操作句柄
 *
 *  @return fromViewController的view
 */
- (UIView *)currentViewWith:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 *  获取toViewController的view
 *
 *  @param transitionContext 操作句柄
 *
 *  @return toViewController的view
 */
- (UIView *)toViewWith:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 *  获取fromViewController
 *
 *  @param transitionContext 操作句柄
 *
 *  @return fromViewController
 */
- (UIViewController *)currentViewControllerWith:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 *  获取toViewController
 *
 *  @param transitionContext 操作句柄
 *
 *  @return toViewController
 */
- (UIViewController *)toViewControllerWith:(id <UIViewControllerContextTransitioning>)transitionContext;

/**
 *  转场动画完成
 */
- (void)transitionCompleteWith:(id <UIViewControllerContextTransitioning>)transitionContext;

@end
//
//  VirtualAnimator.m
//  Transition
//
//  Created by YouXianMing on 15/5/19.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "VirtualAnimator.h"

@implementation VirtualAnimator

- (instancetype)init {
    self = [super init];
    if (self) {

        // 默认参数设置
        [self deafultSet];
    }
    return self;
}

- (void)deafultSet {
    _transitionDuration = 0.5f;
}

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext {
    return _transitionDuration;
}

- (void)animateTransition:(id <UIViewControllerContextTransitioning>)transitionContext {

}

- (UIView *)currentViewWith:(id <UIViewControllerContextTransitioning>)transitionContext {
    return [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey].view;
}

- (UIView *)toViewWith:(id <UIViewControllerContextTransitioning>)transitionContext {
    return [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey].view;
}

- (UIViewController *)currentViewControllerWith:(id <UIViewControllerContextTransitioning>)transitionContext {
    return [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
}

- (UIViewController *)toViewControllerWith:(id <UIViewControllerContextTransitioning>)transitionContext {
    return [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
}

- (void)transitionCompleteWith:(id <UIViewControllerContextTransitioning>)transitionContext {
    [transitionContext completeTransition:YES];
}

@end

特点

  • 分离出 present 与 dissmiss 的动画效果
  • 继承抽象父类 VirtualAnimator 来实现特定动画的功能,便于解耦
  • 简单易懂

核心

时间: 2024-11-03 18:21:37

定制转场动画ControllerTransitionAnimation的相关文章

定制controller转场动画

定制controller转场动画 从iOS7开始就可以自由定制控制器间的转场动画了,以下实例描述最简单的定制方式,达到的效果如下所示: 为了实现这个效果需要这么多的文件-_-!!!! RootViewController // // RootViewController.h // ControllerCustom // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <UIKit/UIKit.h> @interface R

关于自定义转场动画,我都告诉你。

原文出处: 伯恩的遗产(@翁呀伟呀 ) 概述 这篇文章,我将讲述几种转场动画的自定义方式,并且每种方式附上一个示例,毕竟代码才是我们的语言,这样比较容易上手.其中主要有以下三种自定义方法,供大家参考: Push & Pop Modal Segue 前两种大家都很熟悉,第三种是 Stroyboard 中的拖线,属于 UIStoryboardSegue 类,通过继承这个类来自定义转场过程动画. Push & Pop 首先说一下 Push & Pop 这种转场的自定义,操作步骤如下: 创

iOS7 push/pop转场动画

前言 iOS 7之后,苹果提供了自定义转场动画的API,我们可以自己去定义任意动画效果.本篇为笔者学习push.pop自定义转场效果的笔记,如何有任何不正确或者有指导意见的,请在评论中留下您的宝贵意见!!! 请注意:如果要求支持iOS 7以下版本,则不可使用此效果. 实现目标效果 我们本篇文章目标效果: 视图切换种类 如下效果图,这是有两大类视图切换动画的,一种是交互式的,另一种就是自定义的. 本篇只讲其中的UIViewControllerAnimatedTransitioning协议,来实现p

iOS 7 present/dismiss转场动画

前言 iOS 7以后提供了自定义转场动画的功能,我们可以通过遵守协议完成自定义转场动画.本篇文章讲解如何实现自定义present.dismiss自定义动画. 效果图 本篇文章实现的动画切换效果图如下: 视图切换种类 如下效果图,这是有两大类视图切换动画的,一种是交互式的,另一种就是自定义的. 本篇只讲其中的UIViewControllerAnimatedTransitioning协议,来实现present.dismiss动画效果.另外的几个,后面会继续学习总结!!! 协议 我们要实现presen

iOS 转场动画

Inherits from CAAnimation : NSObject Conforms to NSCoding (CAAnimation)NSCopying (CAAnimation)CAAction (CAAnimation)CAMediaTiming (CAAnimation)NSObject (NSObject) Framework /System/Library/Frameworks/QuartzCore.framework Availability Available in iOS

第六十五篇、iOS7自定义转场动画

自定义转场动画,在iOS7及以上的版本才开始出现的,在一些应用中,我们常常需要定制自定义的的跳转动画 1.遵守协议:<UIViewControllerAnimatedTransitioning> 2.协议的方法主要的是两个: // 指定动画的持续时长 1. (NSTimeInterval)transitionDuration: // 转场动画的具体内容 2. (void)animateTransition:(id <UIViewControllerContextTransitioning

iOS7教程系列:自定义导航转场动画以及更多

感谢翻译小组成员dingdaojun热心翻译.本篇文章是我们每周推荐优秀国外的技术类文章的其中一篇.如果您有不错的原创或译文,欢迎提交给我们,更欢迎其他朋友加入我们的翻译小组(联系qq:2408167315). 在iOS7以前,开发者如果希望定制导航控制器推入推出视图时的转场动画,一般都只能通过子类化UINavigationController或者自己编写动画代码去覆盖相应的方法,现在iOS7为开发者带来了福音,苹果公司引入了大量新API,给予了开发者很高的自由度,在处理由UIViewContr

UINavigationController 自定义转场动画(模仿淘宝App跳转)

制作目的 想要自定义系统转场动画速度 放弃不顺畅的 NavigationBar 隐藏消失 干脆直接干掉每个页面的 NavigationBar,在使用 UINavigationController 管理的同时,每个页面的 NavigationBar 都使用自定义的 UIView, 这样既定制程度高又可以在不需要 NavigationBar 的页面无缝对接,包括一些之前 NavigationBar 动画也可以更轻松的利用自定义的 UIView 的适配动画来更灵活的实现 实现功能 可以设置一个自己认为

iOS 自定义转场动画篇

前言: 自定义转场动画其实并不难, 关键在于能够明白思路, 也就是操作步骤. 本篇博客主要以present转场动画为例, 进行分析, 操作, 如有错误欢迎简信与我交流. 不进行修改的话, presentViewController:animated:completion:相信这个方法很多人都是用过, 称作模态推出界面, 默认都是从屏幕下方推出新的控制器. 自定义的目的就是为了修改固定的推出方式, 同时加上你想要的动画. 一个关键的概念: UIViewControllerAnimatedTrans