zoukankan      html  css  js  c++  java
  • 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 转载请注明出处,谢谢合作。 睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。
  • 相关阅读:
    浏览器渲染流程
    MVC模式
    传统的DOM是如何进行渲染的
    报文的概念及理解
    单页面开发与多页面开发的优缺点
    第4次作业
    售票系统
    第三次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/lishanshan/p/4883608.html
Copyright © 2011-2022 走看看