定制转场动画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 来实现特定动画的功能,便于解耦
  • 简单易懂

 

核心

目录
相关文章
|
XML Java Android开发
Android动画 补间动画
补间动画:属于Android中View动画的一种,就是涵盖了 平移、缩放、旋转 和 透明度四种变化的动画。实现方式有两种:xml文件 和 java代码。 四种补间动画分别为RotateAnimation、ScaleAnimation、TranslateAnimation、AlphaAnimation,他们的父类为Animation。
|
JavaScript 前端开发 开发者
动画-钩子函数实现小球半场动画|学习笔记
快速学习动画-钩子函数实现小球半场动画
137 0
动画-钩子函数实现小球半场动画|学习笔记
|
Android开发 内存技术
Android动画(帧动画、补间动画、属性动画)讲解
帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动; 属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同时移动、缩放、旋转和淡入淡出的效果也不再只是一种视觉上的动画效果了。所以从Android 3.0版本开始,系统给我们提供了一种全新的动画模式,属性动画(property animation)。
358 0
|
搜索推荐 UED
使用 fluro 的转场动画提高页面切换体验
fluro 提供了滑入、渐现、全屏对话框、原生等多种转场动画形式,同时还支持自定义转场动画。借助转场动画可以提高用户体验。
283 0
使用 fluro 的转场动画提高页面切换体验
SwiftUI—如何给视图添加拖动手势
SwiftUI—如何给视图添加拖动手势
628 0
|
XML Android开发 数据格式
Android动画一:Activity过渡动画详细实现原理
虽然 Android 5.0 之后推出了新的过渡动画方式,但通常只是用于特定的场合使用,activity.overridePendingTransition() 通用方式的过渡动画还是很常用。 原理分析 startActivity(Intent(this,SecondActivity::class.
7593 0
|
XML Android开发 数据格式
实战 | 使用揭露动画(Reveal Effect)做一个丝滑的Activity转场动画
提笔之际(附总体思路) 最近跟几个小伙伴在实践一个项目,考虑到界面效果,我们决定使用揭露动画作为Activity的转场动画。 这里主要是我负责这部分的实现。
1535 0
|
XML Android开发 数据格式
Android动画之补间动画详解
一.概念 补间动画是指开发者无需定义动画过程中的每一帧,只需要定义动画的开始和结束两个关键帧,并指定动画变化的时间和方式等,然后交由Android系统进行计算,通过在这两个关键帧之间插入渐变值来实现平滑过渡,从而对View的内容完成一系列的图形变换来实现动画效果,主要包括四种基本效果:透明变化Alpha、大小变化Scale、位移变化Translate、以及旋转变化Route,这四种效果可以动态组合,从而实现复杂灵活的动画。
1275 0

热门文章

最新文章