iOS实现超酷页面切换动画特效

2024-08-21 17:48

本文主要是介绍iOS实现超酷页面切换动画特效,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天所介绍的主题是关于动画的,在之前的博客中也有用到动画的地方,今天就好好的总结一下iOS开发中常用的动画。说道动画其中有一个是仿射变换的概念,至于怎么仿射的怎么变换的,原理如何等在本篇博客中不做赘述。今天要分享的是如和用动画做出我们要做的效果。 

今天主要用到的动画类是CALayer下的CATransition至于各种动画类中如何继承的在这也不做赘述,网上的资料是一抓一大把。好废话少说切入今天的正题。

一.封装动画方法

1.用CATransition实现动画的封装方法如下,每句代码是何意思,请看注释之。

#pragma CATransition动画实现
- (void) transitionWithType:(NSString *) type WithSubtype:(NSString *) subtype ForView : (UIView *) view
{//创建CATransition对象CATransition *animation = [CATransition animation];//设置运动时间animation.duration = DURATION;//设置运动typeanimation.type = type;if (subtype != nil) {//设置子类animation.subtype = subtype;}//设置运动速度animation.timingFunction = UIViewAnimationOptionCurveEaseInOut;[view.layer addAnimation:animation forKey:@"animation"];
}

代码说明:

CATransition常用的属性如下:

duration:设置动画时间

type:稍后下面会详细的介绍运动类型

subtype:和type匹配使用,指定运动的方向,下面也会详细介绍

timingFunction :动画的运动轨迹,用于变化起点和终点之间的插值计算,形象点说它决定了动画运行的节奏,比如是

均匀变化(相同时间变化量相同)还是先快后慢,先慢后快还是先慢再快再慢.

*  动画的开始与结束的快慢,有五个预置分别为(下同):

*  kCAMediaTimingFunctionLinear            线性,即匀速

*  kCAMediaTimingFunctionEaseIn            先慢后快

*  kCAMediaTimingFunctionEaseOut           先快后慢

*  kCAMediaTimingFunctionEaseInEaseOut     先慢后快再慢

*  kCAMediaTimingFunctionDefault           实际效果是动画中间比较快.

2.用UIView的block回调实现动画的代码封装

#pragma UIView实现动画
- (void) animationWithView : (UIView *)view WithAnimationTransition : (UIViewAnimationTransition) transition
{[UIView animateWithDuration:DURATION animations:^{[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];[UIView setAnimationTransition:transition forView:view cache:YES];}];
}

3.改变View的背景图,便于切换时观察

1 #pragma 给View添加背景图
2 -(void)addBgImageWithImageName:(NSString *) imageName
3 {
4     self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:imageName]];
5 }

二.调用上面的方法实现我们想要的动画

1.我们在View上添加多个Button,给不同的Button设置不同的Tag值,然后再ViewController中绑定同一个方法,点击不同的button实现不同的页面切换效果。storyBoard上的控件效果如下图所示:

iOS实现超酷页面切换动画特效

2.下面我们就开始编写点击button要回调的方法

(1).定义枚举来标示按钮所对应的动画类型,代码如下:

typedef enum : NSUInteger {Fade = 1,                   //淡入淡出Push,                       //推挤Reveal,                     //揭开MoveIn,                     //覆盖Cube,                       //立方体SuckEffect,                 //吮吸OglFlip,                    //翻转RippleEffect,               //波纹PageCurl,                   //翻页PageUnCurl,                 //反翻页CameraIrisHollowOpen,       //开镜头CameraIrisHollowClose,      //关镜头CurlDown,                   //下翻页CurlUp,                     //上翻页FlipFromLeft,               //左翻转FlipFromRight,              //右翻转} AnimationType;

(2),获取Button的Tag值:

1     UIButton *button = sender;
2     AnimationType animationType = button.tag;

(3).每次点击button都改变subtype的值,包括上,左,下,右

NSString *subtypeString;switch (_subtype) {case 0:subtypeString = kCATransitionFromLeft;break;case 1:subtypeString = kCATransitionFromBottom;break;case 2:subtypeString = kCATransitionFromRight;break;case 3:subtypeString = kCATransitionFromTop;break;default:break;}_subtype += 1;if (_subtype > 3) {_subtype = 0;}

(4),通过switch结合上边的枚举来判断是那个按钮点击的

1 switch (animationType)
2 {
3     //各种Case,此处代码下面会给出  
4 }

3.调用我们封装的运动方法,来实现动画效果

(1),淡化效果

1         case Fade:
2             [self transitionWithType:kCATransitionFade WithSubtype:subtypeString ForView:self.view];
3             break;
4

(2).Push效果

1         case Push:
2             [self transitionWithType:kCATransitionPush WithSubtype:subtypeString ForView:self.view];
3             break;
4

效果如下:

iOS实现超酷页面切换动画特效

(3).揭开效果:

1         case Reveal:
2             [self transitionWithType:kCATransitionReveal WithSubtype:subtypeString ForView:self.view];
3             break;

效果图如下:

iOS实现超酷页面切换动画特效

(4).覆盖效果

1         case MoveIn:
2             [self transitionWithType:kCATransitionMoveIn WithSubtype:subtypeString ForView:self.view];
3             break;
4

效果图如下:

iOS实现超酷页面切换动画特效

(5).立方体效果

1         case Cube:
2             [self transitionWithType:@"cube" WithSubtype:subtypeString ForView:self.view];
3             break;

效果如下:

iOS实现超酷页面切换动画特效

(6).吮吸效果

1         case SuckEffect:
2             [self transitionWithType:@"suckEffect" WithSubtype:subtypeString ForView:self.view];
3             break;

效果如下:

iOS实现超酷页面切换动画特效

(7).翻转效果

1         case OglFlip:
2             [self transitionWithType:@"oglFlip" WithSubtype:subtypeString ForView:self.view];
3             break;

图如下:

iOS实现超酷页面切换动画特效

8.波纹效果

1         case RippleEffect:
2             [self transitionWithType:@"rippleEffect" WithSubtype:subtypeString ForView:self.view];
3             break;

iOS实现超酷页面切换动画特效

(9).翻页和反翻页效果

1         case PageCurl:
2             [self transitionWithType:@"pageCurl" WithSubtype:subtypeString ForView:self.view];
3             break;
4             
5         case PageUnCurl:
6             [self transitionWithType:@"pageUnCurl" WithSubtype:subtypeString ForView:self.view];
7             break;

iOS实现超酷页面切换动画特效        iOS实现超酷页面切换动画特效

(10).相机打开效果

case CameraIrisHollowOpen:[self transitionWithType:@"cameraIrisHollowOpen" WithSubtype:subtypeString ForView:self.view];break;case CameraIrisHollowClose:[self transitionWithType:@"cameraIrisHollowClose" WithSubtype:subtypeString ForView:self.view];break;

iOS实现超酷页面切换动画特效

(11),调用上面封装的第二个动画方法

case CurlDown:[self animationWithView:self.view WithAnimationTransition:UIViewAnimationTransitionCurlDown];break;case CurlUp:[self animationWithView:self.view WithAnimationTransition:UIViewAnimationTransitionCurlUp];break;case FlipFromLeft:[self animationWithView:self.view WithAnimationTransition:UIViewAnimationTransitionFlipFromLeft];break;case FlipFromRight:[self animationWithView:self.view WithAnimationTransition:UIViewAnimationTransitionFlipFromRight];break;

我把上面的Demo的源码放在GitHub上,其地址为:https://github.com/lizelu/CATransitionDemo.git


这篇关于iOS实现超酷页面切换动画特效的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093853

相关文章

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系