利用 CAKeyframeAnimation实现任意轨迹移动

自定义 View,实现以下方法即可
- (void)drawRect:(CGRect)rect {
// Drawing code
// 初始化UIBezierPath
UIBezierPath *path = [UIBezierPath bezierPath];
// 首先设置一个起始点
/////左半边曲线
CGPoint startPoint = CGPointMake(rect.size.width/2, rect.size.height*0.4);
// 以起始点为路径的起点
[path moveToPoint:startPoint];
// 设置一个终点
CGPoint endPoint = CGPointMake(rect.size.width/2, rect.size.height- rect.size.height*0.1);
// 设置第一个控制点
CGPoint controlPoint1 = CGPointMake(self.bounds.size.width*0.1, rect.size.height*0.1);
// 设置第二个控制点
CGPoint controlPoint2 = CGPointMake(0, self.size.height*0.7);
// 添加三次贝塞尔曲线
[path addCurveToPoint:endPoint controlPoint1:controlPoint1 controlPoint2:controlPoint2];
// 设置另一个起始点
[path moveToPoint:endPoint];
//右半边曲线>>>>>>>>>>>>>>>>>>>>
// 设置第三个控制点
CGPoint controlPoint3 = CGPointMake(rect.size.width-self.bounds.size.width*0.1, rect.size.height*0.1);
// 设置第四个控制点
CGPoint controlPoint4 = CGPointMake(rect.size.width, self.size.height*0.7);
// 添加三次贝塞尔曲线
[path addCurveToPoint:startPoint controlPoint1:controlPoint4 controlPoint2:controlPoint3];
// 设置线宽
path.lineWidth = 3;
// 设置线断面类型
path.lineCapStyle = kCGLineCapRound;
// 设置连接类型
path.lineJoinStyle = kCGLineJoinRound;
// 设置画笔颜色
[[UIColor redColor] set];
[path stroke];
UIView *heart = [[UIView alloc] init];
heart.frame = CGRectMake(0, 0, 20 , 20);
heart.backgroundColor =[UIColor redColor];
[self addSubview:heart];
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
// 设置动画的路径为心形路径
animation.path = path.CGPath;
// 动画时间间隔
animation.duration = 3.0f;
// 重复次数为最大值
animation.repeatCount = FLT_MAX;
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards;
//设置加速度
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
// 将动画添加到动画视图上
[heart.layer addAnimation:animation forKey:nil];
}
Demo地址:https://github.com/yuying2012/WJDStudyLibrary
这是一个大工程,请从工程中寻找相关模块代码.
利用 CAKeyframeAnimation实现任意轨迹移动的更多相关文章
- 利用最小二乘法拟合任意次函数曲线(C#)
原文:利用最小二乘法拟合任意次函数曲线(C#) ///<summary> ///用最小二乘法拟合二元多次曲线 ///</summary> ///< ...
- 利用arguments求任意数量数字的和/最大值/最小值
文章地址 https://www.cnblogs.com/sandraryan/ arguments是函数内的临时数据,用完销毁,有类似于数组的操作,但不是数组. 举个栗子1:利用arguments求 ...
- 利用msg_msg实现任意地址读写
利用msg_msg实现任意地址读写 msgsnd和msgrcv的源码分析 内核通过msgsnd和msgrcv来进行IPC通信.内核消息分为两个部分,一个是消息头msg_msg(0x30),以及后面跟着 ...
- 利用geojson实现模型轨迹运动
直接上代码 var viewer = new Cesium.Viewer('cesiumContainer'); //Set the random number seed for consistent ...
- 利用SVN进行任意文件对比
都知道SVN可以比较已经上传的文件的内容,看到两个文件有什么不同的地方. 但是有时候并不想上传想要比较的文件,能不能利用SVN这样一个功能去比较别的两个文件呢? 琢磨来琢磨去, 发现只要在资源管理器里 ...
- (一一五)利用NSKeyedArchiver实现任意对象转为二进制
[应用背景] 在数据库中存储数据时,如果对象过于复杂,又不必要创建复杂的表,可以直接把整个对象转化为二进制存入数据库字段,然后取出后再还原即可. [实现方法] 在PHP中,使用序列化和反序列化可以实现 ...
- Java -- 利用反射 操作任意数组,包括对象数组 和 基本数据类型的数组
items为任意数组
- 转: c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
//这样产生0 ~ 100的强随机数(含100) ; int rnd = int.MinValue; decimal _base = (decimal)long.MaxValue; ]; System ...
- c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
//这样产生0 ~ 100的强随机数(含100)int max = 100;int rnd = int.MinValue;decimal _base = (decimal)long.MaxValue; ...
随机推荐
- 【转】asp获取【微信公众平台】Access Token的源代码下载
在做微信开发时候,经常要用到Access Token,但是官网提供的都是基于php写的,我用asp写了,有需要可以直接复制去用,模板消息,jdk上传图片,客服消息等全需要这个:'获取 access_t ...
- Python3入门(十三)——常用内置模块之时间日期模块datatime
1.日期时间模块——datatime //其他模块例如time.calender等模块暂不展开 (1)获取当前时间:datatime.now(): from datetime import datet ...
- EXCEL导入配置开发
1.登录infor 企业级 选择 配置 EXCEL导入配置 2.新增配置(设置模板名.说明.存储过程名称.应用仓库) 后保存 3.将excel模板放到服务器 路径:/opt/infor/sce/wil ...
- Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. ord ...
- VUE中事件修饰符:stop prevent self capture
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- C# .NET 判断输入的字符串是否只包含数字和英文字母
FROM : https://www.cnblogs.com/ilookbo/p/4828722.html /// <summary> /// 判断输入的字符串是否只包含数字和英文字母 ...
- iOS label出现异常黑色问题
在开发中,有时候会发现label周围有一层灰色的边框,但是我们无论是修改边框的宽度还是颜色,这个边框一直是这个样子,不会发生任何变化. 类似上面这个,有一条条的竖线, 这是因为当设置 UILabel ...
- Action<T>和Func<T>委托事例
Action<T>和Func<T>委托事例 using System; //除了为每个参数和返回类型定义一个新委托类型之外,还可以使用Action<T>和Func& ...
- D2.Docker: 安装部署相关问题
[mysql] docker 安装完mysql 后客户端无法访问
- [转帖]HAProxy 7层 负载均衡
HAProxy 7层 负载均衡 https://www.cnblogs.com/jicki/p/5546902.html HAProxy 系统 CentOS 5.8 x64 wget http://h ...