basicAnimation移动图形

目的:采用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];
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS开发攻城狮的集散地

自定义UIPageControl、UITextView占位视图

22990
来自专栏郭霖

Android高级图片滚动控件,编写3D版的图片轮播器

大家好,好久不见了,最近由于工作特别繁忙,已经有一个多月的时间没写博客了,我也是深感惭愧。那么今天的这篇既然是阔别了一个多月的文章,当然要带来更加给力点的内容了...

87080
来自专栏向治洪

ios动画

在iOS开发中,动画是提高用户体验重要的环节之一。一个设计严谨、精细的动画效果能给用户耳目一新的效果,这对于app而言是非常重要的。 简介 iOS动画主要是指C...

25050
来自专栏陈满iOS

iOS·长按保存图片到相册:系统原生UIActionSheet与UIAlertView,UIAlertController等方案

12210
来自专栏wOw的Android小站

[iOS] 列表滑动展开隐藏头部HeaderView

首先看一下BiliBili客户端的视频浏览界面。默认界面Header完全展开,并且Header显示AV号(别乱想,就是视频编号了)以及播放按钮。滑动之后Head...

72320
来自专栏Alice

iOS CALayer 简单介绍

总结:能看到的都是uiview,uiview能显示在屏幕上是因为它内部的一个层calyer层。

11720
来自专栏一“技”之长

iOS UIStepper(步进控件)使用总结

@property(nonatomic,getter=isContinuous) BOOL continuous;

8620
来自专栏落影的专栏

直播APP常用动画效果

介绍 记录、总结开发遇到一些问题,大家一起交流学习。 这次带来,对直播APP的常用动画总结。 直播Live 效果展示 下面是一个很多平台都有的入门豪华礼物动...

59780
来自专栏陈满iOS

iOS开发·适配iPhone X相关的宏和方法

适配iPhone X和Xcode 9的过程中,除了与导航栏相关的问题,还有一个问题经常出现,就是UITableView相关的问题。下面两个办法可以解决多数错位的...

17640
来自专栏非典型技术宅

iOS动画系列之七:实现类似Twitter的启动动画1. CAKeyframeAnimation2. CAAnimationGroup3. 实现类似Twitter的启动动画

24530

扫码关注云+社区

领取腾讯云代金券