前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >basicAnimation移动图形

basicAnimation移动图形

作者头像
用户1219438
发布2018-02-01 11:41:23
5970
发布2018-02-01 11:41:23
举报
文章被收录于专栏:AliceAlice

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

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

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

                包装的时候是【NSValue valueWithPoint】

              取值的时候是【toValue CGPoint】;

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

效果图:

具体实现代码

viewController.m

代码语言:javascript
复制
@interface ViewController ()
@property(nonatomic,strong)CALayer *subLayer;
@end
代码语言:javascript
复制
[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表示下一点(目的点)

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

 */

实现手势的代码:

代码语言:javascript
复制
-(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"];
    
}

 代理动画的方法:

代码语言:javascript
复制
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
{
    NSValue *toValue = ((CABasicAnimation*)anim).toValue;
    self.subLayer.position = [toValue CGPointValue];
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-10-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档