iOS:CAKeyframeAnimation实现UIImageView精准时间的动画结束事件

ios开发——仿新版iBooks书本打开与关闭动画 IOS新版iBooks吸引人的地方除了有干净整洁的界面、方便灵活的操作以及大容量的书籍容量以外,还有其优秀的用户交互,尤其是其动画的使用。打开一本书时书本缓慢放大并打开,关闭一本书后书本关闭并回到原位置。现在我们来实现这个简单的功能。 阅读详情


         由于项目 界面效果 的需要,不能用gif来展示开机动画(动画质量,颜色差太多),只能一帧一帧图片显示。所以自然想到UIImageView的animationImages来做动画。不过系统没提供具体的结束事件,只能用 延时(会有0.0x秒的误差) 或 不优雅的timer 来做。
        为了动画结束时的精准控制(心中一万只草泥马踏过策划),请教组里bigshot,学到了CAAnimation提供的animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;方法,可以精确知道动画结束事件。
       OK,Talk is cheap,CODE SHOW~

- (void)viewDidLoad {

  //创建UIImageView
  UIImageView *openningAnimation = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,kUIScreen_Width,kUIScreen_Height)];
    openningAnimation.image = [UIImage imageNamed:@"image_last.png"];
   [self.view addSubview:openningAnimation];

  //创建CAKeyframeAnimation
  CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
   animation.duration = animationTime;
   animation.delegate = self; 

  //存放图片的数组
   NSMutableArray *array = [NSMutableArray array];
   for(NSUInteger i = 0;i < count ;i++) {
       
        UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:"image_%d.png",i]];
        CGImageRef cgimg = image.CGImage;
        [array addObject:(__bridge UIImage *)cgimg];
   }

   animation.values = array;

   [openningAnimation.layer addAnimation:animation forKey:nil];
}

- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {

   //clearMemory
   //结束事件
}

记得在动画结束时clearMemory ,因为那些高清无码大图超占内存。

iOS-CALayer动画之CAKeyframeAnimation动画视图的添加点击事件和气泡随机飘动上升动画 iOS-CALayer动画之CAKeyframeAnimation动画视图的添加点击事件和气泡随机飘动上升动画 @property (strong, nonatomic) UIView *bgView;//气泡所在的view (void)viewDidLoad { self.bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen] 阅读详情

相关推荐

UIImageView动画实现指南与技巧

Core Animation是iOS和macOS操作系统中用于创建流畅动画的一个框架。它的架构包括了CALayer、CAAnimation、CAMediaTiming和CAAnimationDelegate等组件。CALayer是基础,负责内容的渲染,而CAAnimation则是 CALayer 提供动画效果的核心组件。CALayer:它类似于UIView,但专注于绘图,它不处理用户交互,主要负责动画的基础渲染。一个CALayer可以包含其他CALayer作为子层,形成层次结构。

weixin_35433448的博客 364

iOS CoreAnimation动画系列教程(二):CAKeyFrameAnimation

在上一篇专题中我们提到,CAAnimation可分为以下四种:1.CABasicAnimation 通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。可以看做特殊的CAKeyFrameAnimation 2.CAKeyframeAnimation Keyframe顾名思义就是关键点的frame,你可以通过设定CALayer的始点、中间关键点、终点的frame,时间,动画会沿你设定的轨迹进行移

代码工程师 542

序列帧动画,开始,结束监听的解决

序列帧动画,开始,结束监听的解决源代码,是一个很不错的Android源码,有兴趣的伙伴们抽时间可以看一下把

iOS动画:UIImageView帧动画(完结)

11

tania的专栏 3280

别再为授权费头疼了!手把手教你免授权搞定西门子、马扎克等12种主流数控机床的数据采集

本文提供了一套免授权采集西门子、马扎克等12种主流数控机床数据的实战指南,帮助中小型机加工车间节省80%以上的采集成本。通过TCP/UDP协议逆向工程和跨平台数据整合,实现经济、灵活且可持续的数据采集方案,涵盖设备兼容性处理、数据频率优化等关键问题。

weixin_26873711的博客 709

Vivado2023.2与Vitis协同开发:从Hello World到BOOT.BIN的完整流程解析

本文详细解析了使用Vivado 2023.2与Vitis协同开发ZYNQ/MPSoC平台的完整流程。从环境安装、硬件设计、软件编写、在线调试到生成独立的BOOT.BIN启动文件,手把手指导开发者完成从Hello World到系统固化的全步骤,并提供了常见问题的避坑指南,帮助初学者快速掌握软硬件协同开发的核心技能。

weixin_29197051的博客 177

iOS:核心动画之关键帧动画CAKeyframeAnimation

CAKeyframeAnimation——关键帧动画 关键帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: –CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 – 属性说明: –values:...

dienangpiao2051的博客 325

DSP开发环境及工具之CCS

CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU,ARM等。CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件。从其名称可以看出,该文件的作用是指明如何链接程序的。编辑完C语言设置,添加cmd文件之后,然后检查编译配置选项。主要的操作都是在这个窗口之间做相应的切换。

小柚子的博客 4311

iPhone 如何使用UIImageView播放动画,并停留在之后一张图片并添加播放结束时的事件...

 问题:如何使用UIImageView播放动画,并停留在之后一张图片 思路:除了把动画所需要的几张图片赋值给 animationImages 之外,多加一步 ,把最后一张图片赋值给UIImageView的  Image就好了。让后就开始Animations。  代码如下:               UIImageView *fishAni=[[UIImageView alloc] initWit...

weixin_33798152的博客 530

ITIL 4 讲解:服务目录

最近一直比较忙,没有时间写文章了。今天有空,写写服务目录。 在最近的项目中,服务目录是比较热的话题。金融行业大部分银行、证券、金融公司都实行ITIL流程管理有些年头了,ITIL中最基础的服务请求、事件、问题和变更都已经实施完毕,目前客户在运维领域做的项目大部分都要求整理服务目录,实行服务级别管理。 服务目录介绍 首先解释一下什么是服务目录。服务目录在ITIL 4的定义是:有关服务提供商的所有服务和服务产品的结构化信息,与特定目标受众相关。这个解释有些晦涩难懂,简单来说就是提供给业务用户的服务项,就像饭

雅子MM的专栏 6468

CSP - 2024 普及组初赛试题及解析

CSP - 2024 普及组初赛试题及解析

QD_Jason的博客 2911

[置顶]iOS--使用UIImageView进行GIF动图播放

大家好,好久没有跟新了。其实也就昨天到今天的时间。 前言:实际上,GIF动图文件中包含了一组图片及其信息数组,这些信息数据记录着这一组图片中各张图片的播放时长等信息,我们可以将图片和这些信息或取出来,使用UIImageView的帧动画技术进行动画播放。 好了不多说了  开始上代码吧: 首先自己找一个GIF图吧,拖到工程里面。 - (void)createGIF {     UIImage

penghong_miao的博客 6048

Planet explorer:免费获取高分辨率影像的网站

该软件提供了高质量的卫星图像和地形数据,用户可以使用该软件来查看地球上任何地方的详细地图信息,包括地形、道路、建筑物等。在接下来的30天里,你可以点击应用顶部的切换按钮,在新的和当前的应用之间进行切换。如果在你感兴趣的地区没有高分辨率图像,可以通过我们的SkySat卫星为你采购。如果你还没有与我们的50厘米图像合作,请在这里下载我们的高分辨率图像样本,或联系销售,在你的合同中增加任务访问。你可以在 "我的订单 "中订购你的数据以供下载。你也可以点击双方按钮,将图像的足迹锁定在地图上,以获得更好的。

此星光明博客 1681

PullToMakeSoup 动画原理揭秘:CAKeyframeAnimation 与 timeOffset 回放技巧

PullToMakeSoup 是一款开源的 iOS 下拉刷新组件,它把枯燥的"转圈加载"变成了一锅热气腾腾的"煮汤"动画:手指下拉时,平底锅、胡萝卜、土豆、豌豆依次"掉进"锅里,松手后水面升起、火焰燃起、气泡咕嘟冒泡,最后盖上锅盖完成刷新。这篇 PullToMakeSoup 动画原理揭秘文章,将为你拆解这套动画背后最核心的两项技术——CAKeyframeAnimation 关键帧动画与 timeO

gitblog_00495的博客 410

部署OpenClaw时设置环境变量提示export: not valid in this context的完整解决方案

OpenClaw环境变量设置错误解决方案 问题概述 在部署OpenClaw时设置环境变量出现"export: not valid in this context"错误,通常由以下原因导致: 在非交互式shell中使用export命令 在命令替换或管道中使用export 脚本文件包含Windows换行符(CRLF) 解决方案 修正脚本执行方式:确保export命令在正确的shell上下文中使用 使用source命令:通过. setup_openclaw.sh或source setup_op

博客 458

Python 爬虫实战:爬取电商平台商品信息(价格 / 销量 / 评价)

摘要:本文详细介绍基于Python的电商商品信息爬取技术方案,以京东商品详情页为例,对比分析静态(BeautifulSoup)和动态(Selenium)两种爬取方式的实现逻辑。静态爬取适合获取基础信息,而动态爬取可解决JS渲染数据的获取问题。文章包含完整的代码实现、反爬规避策略及数据存储方案,涵盖商品名称、价格、销量、评价等核心数据提取。同时强调爬虫的合规使用,提供扩展方向建议,为电商数据采集提供实用技术参考。

2503_91057718的博客 2023

iOS 模仿系统的抖动动画

模仿系统的抖动动画,主要用的是CAKeyframeAnimation(见之前篇博文)和NSTimer,不多说直接上代码。 #define degreesToRadians(x) (M_PI*(x)/180.0) //左右摇摆的角度 #define RADIUS 3.0f #define ShakeTime 0.5 //动画实现 -(void)ShakeAnimationWithVi

lifreshman的专栏 1519

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ios动画笔记(1)CABasicAnimation和CAKeyframeAnimation

1、CABasicAnimation 使用方法animationWithKeyPath:对 CABasicAnimation进行实例化,并指定Layer的属性作为关键路径进行注册。 //围绕y轴旋转 CABasicAnimation *transformAnima = [CABasicAnimation animationWithKeyPath:@"transform.rotation

likui1989的专栏 790

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

iOS:iOS中的几种动画

本文来自收藏,感谢原创博主. iOS中的动画 摘要本文主要介绍核iOS中的动画:核心动画Core Animation, UIView动画, Block动画, UIImageView的帧动画. 核心动画CoreAnimationUIView动画Block动画UIImageView的帧动画 目录[-] iOS中的动画 Core An...

dienangpiao2051的博客 128

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IOS动画picture

ios动画效果提供了状态或页面转换时流畅的用户体验; 在iOS系统中,Core Animation提供了丰富的api来实现你需要的动画效果; UIKit封装了Core Animation, UIView(UIViewAnimation)提供了动画, 动画支持UIView的这些属性改变: frame, bounds, center, transform, alpha, backgroundColor...

spursping的博客 211

[IOS]UIImageView动画

[IOS]UIImageView动画   #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @implementation ViewController - (void)viewDi

Gamin 1356

七 iOS之 CAKeyFrameAnimation

CAKeyFrameAnimation,关键帧动画 也是CAPropertyAnimation的子类,与CABasicAnimation的区别是: CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CAKeyframeAnimation会使用一个NSArray保存这些数值 属性说明: values:上述的NSArray对象。里面的元素称为“关键

iOS鸽子的技术博客 496

iOS 对象沿着指定路径进行动画

以下方法在自定义view的类里面实现,可放在自定义函数中自行控制触法。也可放在drawRect或layoutSubviews里面让view在显 示时触法。但推荐放在自定义view中触发,因为这样才可以做到自行控制,并保证同时只有一个在运行,否则会因为view的改变导致重绘,导致同时执行多 个相同的动画,会影响效果和耗费内存。 让view对象沿指定的路径进行动画的方法: CAKeyframeAn

Amydom的博客 5173

iOS CAKeyframeAnimation 关键帧动画

##CAKeyframeAnimation 关键帧动画 ###基本属性介绍 @interface CAKeyframeAnimation : CAPropertyAnimation // 指定整个动画所要经过的所有位置(关键帧点),数组的第一个元素为起点,最后一个为终点 @property(nullable, copy) NSArray *values; // 指定整个动画所经过的路径,与values互斥,同时指定会覆盖掉values @property(nullable) CGPathRef

往事随风已矣 451

iOS 视图抖动动画、视图旋转动画以及弹框动画效果

UIView/UIImageView等View 抖动效果 /** 创建视图抖动效果 @param view 控件 */ + (void)shakeAnimationForView:(UIView *) view{ CALayer *viewLayer = view.layer;// 获取到当前的View CGPoint position = viewLayer.po...

WangQingLei0307的博客 1099
下一篇: iOS 不通过textfield代理(与html5交互) 收起键盘
hellojjq
博客等级 码龄15年 0粉丝 2原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值