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

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug