定制转场动画ControllerTransitionAnimation

定制转场动画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-12-22 10:31:27

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

定制controller转场动画

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

iOS 7 present/dismiss自定义转场动画

前言 iOS 7以后提供了自定义转场动画的功能,我们可以通过遵守协议完成自定义转场动画.本篇文章讲解如何实现自定义present.dismiss自定义动画. 关于自定义push/pop转场动画,请阅读iOS 7 push/pop自定义转场动画 效果图 本篇文章实现的动画切换效果图如下: 视图切换种类 如下效果图,这是有两大类视图切换动画的,一种是交互式的,另一种就是自定义的. 本篇只讲其中的UIViewControllerAnimatedTransitioning协议,来实现present.di

ios7 push/pop转场动画

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

深入学习iOS7自定义导航转场动画_IOS

在iOS7以前,开发者如果希望定制导航控制器推入推出视图时的转场动画,一般都只能通过子类化UINavigationController或者自己编写动画代码去覆盖相应的方法,现在iOS7为开发者带来了福音,苹果公司引入了大量新API,给予了开发者很高的自由度,在处理由UIViewController管理的UIView动画时,这些API使用方便,可扩展性也很强,定制起来非常轻松:  全新的针对UIView的动画block方法 全新的UIViewControllerAnimatedTransition

教你使用转场动画提升用户体验

  的确,相比于绘制插画.创作专题页面.设计UI这些富有创造性的设计活动而言,设计表单样式似乎确实是一件单调而苦逼的差事.但仔细想想,如果你设计的表单是支付流程中最重要的环节,那么情况就又不一样了,因为它将是用户选择你和你的企业的起点,也是用户信任的明证.所以这个环节的用户体验必须精雕细琢,尽量臻于完美.除了设计好表格和UI样式之外,合理地运用转场动画会让整个体验提高许多. 这个地方所用的动画并不是单纯的愉悦用户,更重要的目的是让用户明白这个环节是会发生什么,并且如何高效地使用这一产品.如果这个

iOS自定义转场动画实战讲解

转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerAnimated:completion:这一组函数以模态视图的方式展现.隐藏视图.如果用到了navigationController,还可以调用pushViewController:animated:和popViewController这一组函数将新的视图控制器压栈.弹栈. 下图中所有转场动画都是自定义的动画,这些效果如果不用自定义动

实例讲解iOS中的CATransition转场动画使用_IOS

一.简介CATransition是CAAnimation的子类,用于做转场动画 能够为图层提供移出屏幕和移入屏幕的动画效果.iOS比Mac OS X的转场动画效果少一点 如:UINavigationController导航控制器就是通过CATransition转场动画实现了将控制器的视图推入屏幕的动画效果 CATransition头文件 动画属性: type:动画过渡类型 subtype:动画过渡方向 startProgress:动画起点(在整体动画的百分比) endProgress:动画终点(

[译]Workcation App – 第四部分. 场景(Scenes)和 RecyclerView 的共享元素转场动画(Shared Element Transition)

本文讲的是[译]Workcation App – 第四部分. 场景(Scenes)和 RecyclerView 的共享元素转场动画(Shared Element Transition), 原文地址:Workcation App – Part 4. Shared Element Transition with RecyclerView and Scenes 原文作者:Mariusz Brona 译文出自:掘金翻译计划 译者:龙骑将杨影枫 校对者:张拭心.Feximin Workcation App

Android系统的定制---定制系统开机动画

4.3定制Android平台系统 通常产品厂商在拿到Android源码后会在Android源码基础上进行定制修改,以匹配适应自己的产品,从本节开始,我们从最原始的Android源码系统里一步一步定制出自己的Android系统.本节主要内容包含:根据Android源码,添加新产品编译项,定制系统启动界面和文字,定制系统启动动画和声音,定制系统桌面. 4.3.1 添加新产品编译项 Android系统的源代码是一个逻辑结构非常独立工程,在一套Android源码中可以编译出多个产品映像,在需要编译某一个