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];
}
对上述的代码,有任何疑问,可以在下方留言。 也可以给我发邮件咨询:673658917@qq.com 或者是直接加qq:673658917 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
原文地址:https://www.cnblogs.com/lishanshan/p/4883608.html