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
  • 相关阅读:
    点击cell后 cell的背景不变,cell上的字体颜色发生改变的功能实现
    各种属性设置
    多列表 ,菜单
    正则表达式
    多个storyboard之间的跳转问题
    关于uicollectionview的个人学习
    uiscrollview的自动布局
    手动自动布局
    关于简单的跳转问题
    深入理解@class和#import的区别
  • 原文地址:https://www.cnblogs.com/iOSDeng/p/5198149.html
Copyright © 2011-2022 走看看