zoukankan      html  css  js  c++  java
  • Core Animation中的基础动画

    基础动画

    在开发过程中很多情况下通过基础动画就可以满足开发需求,前面例子中使用的UIView代码块进行图像放大缩小的演示动画也是基础动画(在iOS7 中UIView也对关键帧动画进行了封装),只是UIView装饰方法隐藏了更多的细节。如果不使用UIView封装的方法,动画创建一般分为以下几步:

    1.初始化动画并设置动画属性

    2.设置动画属性初始值(可以省略)、结束值以及其他动画属性

    3.给图层添加动画

    //
    //  ViewController.m
    //  Demo0218
    //
    //  Created by wiseman on 16/2/18.
    //  Copyright (c) 2016年 wiseman. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    {
        CALayer *_layer;
    }
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        [self test1];
    }
    
    -(void)test1{
        //CA核心动画:基础动画,关键帧动画,动画组
        _layer = [[CALayer alloc]init];
        _layer.bounds = CGRectMake(0, 0, 10, 20);
        _layer.position = CGPointMake(50, 150);
        _layer.backgroundColor = [UIColor redColor].CGColor;
        [self.view.layer addSublayer:_layer];
        
    }
    
    //移动动画
    -(void)translatonAnimation:(CGPoint)location{
        //创建动画并制定动画属性
        CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
        //设置动画属性的初始值和结束值
    //    basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
        basicAnimation.toValue = [NSValue valueWithCGPoint:location];
        basicAnimation.duration = 2.0;
        //运行一次是否删除动画
    //    basicAnimation.removedOnCompletion = NO;
        //设置重复次数,HUGE_VALF可看做无穷大,起到循环动画的效果
    //    basicAnimation.repeatCount = HUGE_VALF;
        
        //代理
        basicAnimation.delegate = self;
        [basicAnimation setValue:[NSValue valueWithCGPoint:location] forKey:@"KCBasicAnimationLocation"];
        [basicAnimation setValue:@"fuck1" forKey:@"AnimName"];
        
        //添加动画到图层,注意key相当于给动画进行命名,以后获得该动画时可以使用此名称获取
        [_layer addAnimation:basicAnimation forKey:@"fuck"];
    }
    
    //旋转动画
    -(void)rotationAnimation{
        //创建动画并制定动画属性
        CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
        //设置动画属性的初始值和结束值
        //    basicAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(0, 0)];
        basicAnimation.toValue=[NSNumber numberWithFloat:M_PI_2*4];
        basicAnimation.duration = 3.0;
    //    basicAnimation.autoreverses = true;//旋转后再旋转到原来的位置
        basicAnimation.repeatCount = HUGE_VALF;
    
        //添加动画到图层,注意key相当于给动画进行命名,以后获得该动画时可以使用此名称获取
        [_layer addAnimation:basicAnimation forKey:@"fuck2"];
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
        UITouch *touch = touches.anyObject;
        CGPoint location = [touch locationInView:self.view];
        //创建并开始动画
        [self translatonAnimation:location];
        [self rotationAnimation];
    }
    
    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{
        
        NSString *str = [anim valueForKey:@"AnimName"];
        
        if ([str isEqualToString:@"fuck1"]) {
            CGPoint point = [[anim valueForKey:@"KCBasicAnimationLocation"] CGPointValue];
            //开启事务
            [CATransaction begin];
            //禁用隐式动画
            [CATransaction setDisableActions:YES];
            
            _layer.position = point;
            
            //提交事务
            [CATransaction commit];
        }
        
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    @end
  • 相关阅读:
    03_ if 练习 _ little2big
    uva 11275 3D Triangles
    uva 12296 Pieces and Discs
    uvalive 3218 Find the Border
    uvalive 2797 Monster Trap
    uvalive 4992 Jungle Outpost
    uva 2218 Triathlon
    uvalive 3890 Most Distant Point from the Sea
    uvalive 4728 Squares
    uva 10256 The Great Divide
  • 原文地址:https://www.cnblogs.com/iOSDeng/p/5198149.html
Copyright © 2011-2022 走看看