自定义转场动画

本文主要是记录一些在网上找到的一些方法,然后自己整理了下让自己更好理解一点, 如有侵权,请告知

本次实现的代码主要是在网上下载的一些转场动画的基础上更改一下

但是源代码下载地址给忘了,有点对不起原作者了,所以才想着平时记录一些代码,不然过段时间就又会忘记,

下面会把我写的一个小demo贴上来 望指教...

刚刚找源代码地址没找到,找到了几篇文章

http://blog.csdn.net/ityanping/article/details/39270609

该文章内容为:

视图切换,没有NavigationController的情况下,一般会使用presentViewController来切换视图并携带切换时的动画,

其中切换方法如下:

– presentViewController:animated:completion: 弹出,出现一个新视图 可以带动画效果,完成后可以做相应的执行函数经常为nil

– dismissViewControllerAnimated:completion:退出一个新视图 可以带动画效果,完成后可以做相应的执行函数经常为nil

切换动画在压入一个新视图和弹出顶层视图均可以使用,下面只以压入视图为例。

presentModalViewController:animated:completion:使用系统自带四种动画

简单的实现方式:

[page2Controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];

[self presentModalViewController:myNextViewController animated:YES  completion:nil];

系统支持的四种动画:

typedef enum {

UIModalTransitionStyleCoverVertical=0, //默认方式,竖向上推

UIModalTransitionStyleFlipHorizontal, //水平反转

UIModalTransitionStyleCrossDissolve,//隐出隐现

UIModalTransitionStylePartialCurl,//部分翻页效果

} UIModalTransitionStyle;

presentModalViewController:animated:completion: 不用自带的四种动画效果

实现全翻页效果:

CATransition *animation = [CATransition animation];

animation.duration = 1.0;

animation.timingFunction = UIViewAnimationCurveEaseInOut;

animation.type = @"pageCurl";

//animation.type = kCATransitionPush;

animation.subtype = kCATransitionFromLeft;

[self.view.window.layer addAnimation:animation forKey:nil];

[self presentModalViewController:myNextViewController animated:NO completion:nil];

常見的轉換類型(type):

kCATransitionFade              //淡出

kCATransitionMoveIn          //覆盖原图

kCATransitionPush              //推出

kCATransitionReveal          //底部显出来

SubType:

kCATransitionFromRight

kCATransitionFromLeft    // 默认值

kCATransitionFromTop

kCATransitionFromBottom

设置其他动画类型的方法(type):

pageCurl  向上翻一页

pageUnCurl 向下翻一页

rippleEffect 滴水效果

suckEffect 收缩效果,如一块布被抽走

cube 立方体效果

oglFlip 上下翻转效果;

自己实现:

代码地址:http://download.csdn.net/my

首先自定义一个类来管理转场效果

主要代码有

.h文件

声明一个枚举来定义转场类型

typedef enum : NSUInteger {

/**

*  淡入淡出

*/

AnimationTypeFade = 1,

/**

*  推挤

*/

AnimationTypePush,

/**

*  揭开

*/

AnimationTypeReveal,

/**

*  覆盖

*/

AnimationTypeMoveIn,

/**

*  立方体

*/

AnimationTypeCube,

/**

*  吮吸

*/

AnimationTypeSuckEffect,

/**

*  翻转

*/

AnimationTypeOglFlip,

/**

*  波纹

*/

AnimationTypeRippleEffect,

/**

*  翻页

*/

AnimationTypePageCurl,

/**

*  反翻页

*/

AnimationTypePageUnCurl,

/**

*  开镜头

*/

AnimationTypeCameraIrisHollowOpen,

/**

*  关镜头

*/

AnimationTypeCameraIrisHollowClose,

/**

*  下翻页

*/

AnimationTypeCurlDown,

/**

*  上翻页

*/

AnimationTypeCurlUp,

/**

*  左翻转

*/

AnimationTypeFlipFromLeft,

/**

*  右翻转

*/

AnimationTypeFlipFromRight,

} AnimationType;

再声明一个枚举来管理转场方向

/**

定义转场方向

*/

typedef enum : NSUInteger {

AnimationDirectionBottom = 0,

AnimationDirectionLeft,

AnimationDirectionRight,

AnimationDirectionTop

} AnimationDirection;

声明一个方法

/**

*  自定义转场效果

*

*  @param type              转场类型 push 或者 其他类型

*  @param animationDirection 转场方向

*  @param duration          时间 默认为1s

*  @param fromViewController fromVC

*  @param toViewController  toVC

*/

+ (void)transitionWithType:(AnimationType)type WithAnimationDirection:(AnimationDirection)animationDirection duration:(NSTimeInterval)duration fromVC:(UIViewController *)fromViewController toVC:(UIViewController *)toViewController;

.m文件实现方法

+ (void)transitionWithType:(AnimationType)type WithAnimationDirection:(AnimationDirection)animationDirection duration:(NSTimeInterval)duration fromVC:(UIViewController *)fromViewController toVC:(UIViewController *)toViewController

{

//创建CATransition对象

CATransition *animation = [CATransition animation];

NSString *animationType = kCATransitionFade;

//设置运动时间

animation.duration = duration ? duration : 1.f;

switch (type) {

case AnimationTypeFade://淡入淡出

{

animationType =kCATransitionFade;

}

break;

case AnimationTypePush://推挤

{

animationType =kCATransitionPush;

}

break;

case AnimationTypeReveal://揭开

{

animationType =kCATransitionReveal;

}

break;

case AnimationTypeMoveIn://覆盖

{

animationType =kCATransitionMoveIn;

}

break;

case AnimationTypeCube://立方体

{

animationType =@"cube";

}

break;

case AnimationTypeSuckEffect://吮吸

{

animationType =@"suckEffect";

}

break;

case AnimationTypeOglFlip://翻转

{

animationType =@"oglFlip";

}

break;

case AnimationTypeRippleEffect://波纹

{

animationType =@"rippleEffect";

}

break;

case AnimationTypePageCurl://翻页

{

animationType =@"pageCurl";

}

break;

case AnimationTypePageUnCurl://反翻页

{

animationType =@"pageUnCurl";

}

break;

case AnimationTypeCameraIrisHollowOpen://开镜头

{

animationType =@"cameraIrisHollowOpen";

}

break;

case AnimationTypeCameraIrisHollowClose://关镜头

{

animationType =@"cameraIrisHollowClose";

}

break;

case AnimationTypeCurlDown://下翻页

{

animationType =@"pageUnCurl";

}

break;

case AnimationTypeCurlUp://上翻页

{

animationType =@"pageUnCurl";

}

break;

case AnimationTypeFlipFromLeft://左翻转

{

animationType =@"pageUnCurl";

}

break;

case AnimationTypeFlipFromRight://右翻转

{

animationType =@"pageUnCurl";

}

break;

default:

break;

}

NSString *subtype = kCATransitionFromRight;

switch (animationDirection) {

case AnimationDirectionBottom:

{

subtype =kCATransitionFromBottom;

}

break;

case AnimationDirectionLeft:

{

subtype =kCATransitionFromLeft;

}

break;

case AnimationDirectionRight:

{

subtype =kCATransitionFromRight;

}

break;

case AnimationDirectionTop:

{

subtype =kCATransitionFromTop;

}

break;

default:

break;

}

//设置运动type

animation.type = animationType;

if (subtype != nil) {

//设置子类

animation.subtype = subtype;

}

//设置运动速度

animation.timingFunction = UIViewAnimationOptionCurveEaseInOut;

[fromViewController.view.window.layer addAnimation:animation forKey:@"animation"];

[fromViewController presentViewController:toViewController animated:NO completion:nil];

}



demo下载地址:https://github.com/lwy121810/WYAnimationTool

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容