目的:采用CABasicAnimation  点击屏幕上的点来是实现图像的位置移动  并且位置能够不反弹

难点:1 通过动画的KeyPath找到layer的属性

2 通过NSValue将点包装成对象 (下一点toValue的位置  对真正视图的改变)

   包装的时候是【NSValue valueWithPoint】

  取值的时候是【toValue CGPoint】;

注意点:当图像移动了 其实真正的涂层是没有移动的 要想让它真正的发生改变 一般在动画之后做一些具体的移动位置之类的操作

效果图:

具体实现代码

viewController.m

@interface ViewController ()
@property(nonatomic,strong)CALayer *subLayer;
@end
[super viewDidLoad];
//子层的设置 并加入到跟层中 _subLayer = [[CALayer alloc]init];
_subLayer.backgroundColor = [[UIColor redColor]CGColor];
_subLayer.bounds = CGRectMake(0, 0, 100, 100);
_subLayer.position = CGPointMake(100, 100);
_subLayer.cornerRadius = 50; [self.view.layer addSublayer:self.subLayer]; //创建一个手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; //设置几根手指点 点几次
tap.numberOfTouchesRequired = 1;
tap.numberOfTapsRequired = 1; //给view添加手势
[self.view addGestureRecognizer:tap ];

/*

基础动画关注的知识两个点  第一个点不设置的话就是当前点  有属性toValue表示下一点(目的点)

还有就是一定要记得给动画设置代理

*/

实现手势的代码:

-(void)tap:(UITapGestureRecognizer*)sender
{
/*找到点击点 然后将点击点设置成 动画的toValue*/
CGPoint location = [sender locationInView:self.view];
//创建动画 并设置其属性
CABasicAnimation *basic = [[CABasicAnimation alloc]init];
//动画时间 和 keyPath
basic.duration = 3.0f;
basic.keyPath = @"position"; //将下一点进行封装后 赋值给basic的下一点
NSValue *mytoValue = [NSValue valueWithCGPoint:location];
basic.toValue = mytoValue;
//设置能够呆在最后的位置不动
basic.removedOnCompletion = NO;
basic.fillMode = kCAFillModeForwards; //给动画添加代理(很重要)
basic.delegate = self; //将动画添加给subLayer
[self.subLayer addAnimation:basic forKey:@"basic"]; }

代理动画的方法:

-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
NSValue *toValue = ((CABasicAnimation*)anim).toValue;
self.subLayer.position = [toValue CGPointValue];
}

最新文章

  1. 基于React,Redux以及wilddog的聊天室简单实现
  2. mvc 学习(一)
  3. app启动速度
  4. html 语义化 资料
  5. js017-错误处理与调试
  6. Liferay 6.2 改造系列之二十二:如何发布WAR包
  7. 明明已经执行Log.i,偏偏打不出日志
  8. JVM学习总结三——垃圾回收器
  9. Catalyst揭秘 Day2 Catalyst源码初探
  10. WPF中的资源简介、DynamicResource与StaticResource的区别(转)
  11. Rxjava+Retrofit2+Okhttp3多文件上传(服务器端代码+客户端代码)
  12. Windows Azure 网站上的 WordPress 3.8
  13. 10分钟学会JAVA注解(annotation)
  14. vue 全局插槽 全局插座
  15. [Codeforces 863C]1-2-3
  16. 阿里面试:MYSQL的引擎区别
  17. <------------------字节流--------------------->
  18. [UE4]加入音效
  19. Python之路(第三篇):Python基本数据类型字符串(二)
  20. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十二)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网。

热门文章

  1. 最好的JAVA IDE IntelliJ IDEA使用简介(一)—之界面元素
  2. 大脑提取每一个体素26领域的matlab代码
  3. leetcode排列,求第k个排列
  4. SWMM代码移植到64位平台
  5. 为xampp 安装pear db (database) 模块
  6. 3D视频的质量评价报告 (MSU出品)
  7. SVN 资源库报错 E175002
  8. 字符集(CHARACTER SET)和校对集(COLLATE)
  9. 使用Morphia框架操作mongodb
  10. 手把手教学:详解HTML5移动开发框架PhoneJS