OC - 25.CAKeyframeAnimation
概述
简介
- CAKeyframeAnimation又称关键帧动画
- CAKeyframeAnimation是抽象类CAPropertyAnimation的子类,可以直接使用
- 通过values与path两个属性指定动画属性
注意事项
- 若指定了path属性,则values属性将被忽略
- CABasicAnimation相当于只有两个关键帧的CAKeyframeAnimation
关键帧动画的常用属性
values(NSArray *)
- 存放关键帧的多个值
- 类似于CABasicAnimation的fromValue与toValue值
path(CGPathRef)
- 动画的执行路径
- 可以通过绘图的方式绘制路径
keyTimes(NSArray *)
- 每个关键帧的执行时间
- 类型为NSNumber类型
- 若不指定,则所有的关键帧平分动画的duration时长
timingFunctions(NSArray *)
- 速度控制函数数组
calculationMode(NSString *)
- 指定关键帧的动画属性
- 若指定该值,则keyTimes与timingFunctions属性值将被忽略
- 默认为:kCAAnimationLinear
rotationMode(NSString *)
- 指定旋转模式,默认为nil
示例
效果图

实现思路
- 通过监听执行动画的UI控件的触摸事件来绘制贝瑟尔曲线
- 创建关键帧动画,指定执行动画的keyPath属性
- 将绘制的贝瑟尔曲线作为动画的执行路径
- 将动画添加到指定的图层上
实现步骤(自定义UIView的子类)
- 使用成员属性保存贝瑟尔路径
@property (nonatomic, strong) UIBezierPath *path;监听触摸事件的状态,绘制贝瑟尔曲线
- 开始
//确定起点
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//获取当前触摸点
UITouch *touch = [touches anyObject];
CGPoint curretnPoint = [touch locationInView:self]; //创建路径
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:curretnPoint];
//保存路径
self.path = path;
}- 移动
//添加线条
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
//获取当前触摸点
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:self];
//添加线条
[self.path addLineToPoint:currentPoint];
//重绘,将曲线显示到图层上
[self setNeedsDisplay];
}- 结束(创建动画)
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
//创建动画
CAKeyframeAnimation *animation = [CAKeyframeAnimation animation]; //指定执行动画的属性,
animation.keyPath = @"position";
//设置动画的执行路径
animation.path = self.path.CGPath; //设置动画的执行时间
animation.duration = 1;
//设置动画的重复次数
animation.repeatCount = MAXFLOAT; //将动画添加到对应的图层上
[[[self.subviews firstObject] layer] addAnimation:animation forKey:nil];
}将路径显示到图层上
//绘制路径
- (void)drawRect:(CGRect)rect
{
[self.path stroke];
}
OC - 25.CAKeyframeAnimation的更多相关文章
- OC基础(25)
NSNumber NSValue NSDate NSFileManager *:first-child { margin-top: 0 !important; } body > *:last-c ...
- OC动画:CAKeyframeAnimation
// 方法一 用法1 Value方式 //创建动画对象 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyP ...
- 25 (OC)* iOS网络HTTP、TCP、UDP、Socket 知识总结
应用层:1.用户接口.应用程序:2.Application典型设备:网关:3.典型协议.标准和应用:TELNET.FTP.HTTP 表示层:1.数据表示.压缩和加密presentation2.典型设备 ...
- c和oc小知识
1.const const 修饰了*p1 / *p2 const int * p1=&age; int const * p2=&age;//和上面的意义一样 ,换句话说就是 在 “ * ...
- oc集合
本人之前学习过一年半ios开发 由于行情太过凄惨,故转前端.心在前端,苹果亦难忘!把我平时的笔记作出给大家总结! 回顾之前的知识 便利初始化函数:框架类库中的一些类有一系列的以init开头的方法,这些 ...
- OC 面试问题汇总
OC 问题汇总: 1. 你如何理解 iOS 内存管理 1. new alloc copy retain这些对象我们都要主动的release或者 autorelease 2. 如果是类方法创建的 ...
- 关于OC中的小数精确计算---NSDecimalNumber
NSDecimalNumber 翻译补充自:http://rypress.com/tutorials/objective-c/data-types/nsdecimalnumber 感谢乐于分享的大神 ...
- Swift - 使用CAKeyframeAnimation实现关键帧动画
1,CAKeyframeAnimation介绍 CAKeyframeAnimation可以实现关键帧动画,这个类可以实现某一属性按照一串的数值进行动画,就像是一帧一帧的制作出来一样. 2,使用样例 ...
- OC的总结 ***希望对大家有帮助*** ---高小杰
1. NSLog 是Foundation提供的一个输出函数,它的功能非常强大,不仅可以输出字符串,还可以输出各种对象,到后面程序还会见到大量的使用NSLog()函数. 2. N ...
随机推荐
- log4j将日志输出到控制台,文件,邮件
#将日志写到文件 log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=e\:\ ...
- 关于android布局的两个属性dither和tileMode
首先,两个单词的中文意思分别是dither(抖动)和tileMode(平铺) 1,先来介绍tileMode(平铺) 它的效果类似于 让背景小图不是拉伸而是多个重复(类似于将一张小图设置电脑桌面时的效果 ...
- java多线程 ReentrantLock
本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...
- 【HDOJ】1455 Sticks
DFS.搜索以棍数为条件循环搜索较好,这样不会超时. #include <stdio.h> #include <string.h> #include <stdlib.h& ...
- Linux Shell编程(25)——I/O 重定向
默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上). 这3个文件和其他打开的文件都可以被重 ...
- Unity FisheyeShader using Spherical Mapping
Shader "Hidden/FisheyeShader" { Properties { _MainTex ("Base (RGB)", 2D) = " ...
- 在Ant Build文件中使用正则表达式替换文件内容
这需要在build文件中使用<replaceregexp>标签, 这个标签的使用大概是这个样子的: <replaceregexp file="${src}/build.pr ...
- [转载]jQuery.extend 函数详解
JQuery的extend扩展方法: Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,在此,我们一起去了解了解. 一.Jquery的扩展方 ...
- 《Linear Algebra and Its Applications》-chaper4-向量空间-子空间、零空间、列空间
在线性代数中一个非常重要的概念就是向量空间R^n,这一章节将主要讨论向量空间的一系列性质. 一个向量空间是一些向量元素构成的非空集合V,需要满足如下公理: 向量空间V的子空间H需要满足如下三个条件: ...
- lightoj1057 - Collecting Gold (tsp问题)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1057 题目大意:在二维矩阵中,给你一个起点和至多15个的目标点.要你求出从起点出发经过 ...