zoukankan      html  css  js  c++  java
  • ios 关于动画用法的总结

     
    #import "FirstVC.h"
    @implementation FirstVC
    /*
        创建xib过程
        1 创建xib(名字和类名相同)
        2 文件拥有者为类名
        3 和类的view连线
     */
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
     
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
    }
     
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
     
    //UIView属性动画
    - (IBAction)pressPropertyAnimation:(id)sender {
        //1 准备动画
        //参数1: 动画的作用, 用来区分多个动画, 参数二: 传递参数用 nil:OC中使用 NULL:C语言使用
        [UIView beginAnimations:@"改变大小" context:NULL];
        //在准备动画的时候可以设置动画的属性
        [UIView setAnimationDuration:2];//设置动画的持续时间
        [UIView setAnimationDelegate:self];
        [UIView setAnimationWillStartSelector:@selector(startAnimation)];
    //    [UIView setAnimationDelay:1];//动画延迟执行时间
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//动画的曲线
        [UIView setAnimationRepeatCount:20];//动画的重复次数
        [UIView setAnimationRepeatAutoreverses:YES];//动画往返执行, 必须设置动画的重复次数
        //2 修改view的属性, 可以同时修改多个属性 注意:不是所有的属性都可以修改的(只有frame, center, bounds, backgroundColor, alpha, transform 可以修改)
        self.changeView.frame = CGRectMake(110100100100);
    //    self.changeView.backgroundColor = [UIColor brownColor];
        self.changeView.backgroundColor = [UIColor colorWithRed:arc4random() % 256 255.0 green:arc4random() % 256 255.0 blue:arc4random() % 256 255.0 alpha:0.5];
        //3 提交并执行动画
        [UIView commitAnimations];
    }
    //UIView过度动画
    - (IBAction)pressTranstionAnimation:(id)sender {
        //1 准备动画
        [UIView beginAnimations:@"过度动画" context:NULL];
        [UIView setAnimationDuration:5];
        [UIView setAnimationRepeatCount:50];
        //2 设置过度样式
        //参数1: 过度样式, 参数2: 指定那个View做动画, 参数3: 是否设置缓存
        [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.changeView cache:YES];
        self.changeView.backgroundColor = [UIColor colorWithRed:arc4random() % 256 255.0 green:arc4random() % 256 255.0 blue:arc4random() % 256 255.0 alpha:0.5];
        //3 提交并执行动画
        [UIView commitAnimations];
    }
     
    //Block动画
    - (IBAction)pressBlockAnimation:(id)sender {
        //只有一行代码 Block动画实质是对UIView动画的封装
        //参数1:动画时长 参数2:Block: 设置要修改的View属性
        /*
        [UIView animateWithDuration:2 animations:^{
            self.changeView.backgroundColor = [UIColor orangeColor];
        }];
         */
        //第二种Block
        /*
        //参数1:动画时长 参数2:Block: 设置要修改的View属性 参数3: 动画完成时调用
        [UIView animateWithDuration:2 animations:^{
            self.changeView.backgroundColor = [UIColor orangeColor];
        } completion:^(BOOL finished) {
            //finished判断动画是否完成
            if (finished) {
                NSLog(@"finished");
            }
        }];
        */
        //第三种Block
        /*
        [UIView animateWithDuration:2 delay:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{
    //        设置要修改的View属性
            self.changeView.backgroundColor = [UIColor orangeColor];
        } completion:^(BOOL finished) {
            //finished判断动画是否完成
            if (finished) {
                NSLog(@"finished");
            }
        }];
         */
        //对过度动画的封装
        //参数1: 改变的View 参数2:动画时长 参数3:动画类型 参数4 Block: 设置要修改的View属性 参数5:完成后的操作
        [UIView transitionWithView:self.changeView duration:2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
            self.changeView.backgroundColor = [UIColor orangeColor];
        } completion:^(BOOL finished) {
            //finished判断动画是否完成
            if (finished) {
                NSLog(@"finished");
            }
        }];
    }
     
    #pragma mark - AnimationDelegate
    //动画将要开始时调用
    - (void)animationWillStart:(NSString *)animationID context:(void *)context
    {
        NSLog(@"start: %@, %@", animationID, context);
    }
     
    //动画结束时调用
    - (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
    {
        NSLog(@"stop: %@, %@", animationID, context);
    }
     
    - (void)startAnimation
    {
        NSLog(@"self");
    }
     
     
    #import "SecondVC.h"
    @implementation SecondVC
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        NSLog(@"%@", NSStringFromCGRect(self.changeView.frame));
        NSLog(@"%f", CGRectGetWidth(self.changeView.frame));
        //UIView和CALayer的关系
        //UIView负责交互, frame以及显示CALayer
        //CALayer负责渲染, 并且它是UIView的一个readonly属性
        /*
        self.changeView.layer.cornerRadius = 100;//设置圆角, 参数是内切圆的半径, 若想画一个圆, 前提是view必须是正方形, 参数应该是view边长的一半
        self.changeView.layer.borderWidth = 1;//设置描边的宽度
        self.changeView.layer.borderColor = [UIColor orangeColor].CGColor;//设置描边的颜色(UIView上的颜色使用的是UIColor, CALayer上使用的颜色是CGColor)
        self.changeView.layer.shadowOffset = CGSizeMake(50, 100);//设置阴影的偏移量 width影响水平偏移(正右负左), height影响垂直偏移(正下负上)
        self.changeView.layer.shadowColor = [UIColor grayColor].CGColor;//阴影的偏移的颜色
        self.changeView.layer.shadowOpacity = 1;//阴影的不透明度, 取值范围(0 ~ 1), 默认是0, 就是透明的
         */
    //    CAAnimation抽象类, 使用必须要使用其具体的子类
    //    CAPropertyAnimation抽象子类, 需要子类化
    //    CABasicAnimation
    //    CAKeyframeAnimation
    }
     
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
     
    - (void)dealloc {
        [_changeView release];
        [super dealloc];
    }
    //CABasicAnimation基本动画 没有真正的修改属性值
    - (IBAction)pressBasicAnimation:(id)sender {
        //1 创建并指定要修改的属性
    //    KeyPath:CAlayer的属性名, 不是所有的属性都可以, 只有在头文件中出现animatable的属性才可以, 可以修改属性的属性, 例如:bounds.size
    //    CALayer
        CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds"];
        [basic setDuration:2];
        //2 修改属性值
        basic.fromValue = [NSValue valueWithCGRect:CGRectMake(00, self.changeView.bounds.size.width, self.changeView.bounds.size.height)];
        basic.toValue = [NSValue valueWithCGRect:CGRectMake(00300300)];
    //    basic.byValue = 
        //3 添加动画
        //key做区分动画用
        [self.changeView.layer addAnimation:basic forKey:@"changColor"];
    }
     
    //CAKeyframeAnimation关键帧动画
    - (IBAction)pressKeyFrameAnimation:(id)sender {
        /*
        //1 创建动画
        CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"bounds"];
        [keyFrame setDuration:2];
        //2 修改属性
        keyFrame.values = @[[NSValue valueWithCGRect:CGRectMake(0, 0, self.changeView.bounds.size.width, self.changeView.bounds.size.height)], [NSValue valueWithCGRect:CGRectMake(0, 0, 250, 250)], [NSValue valueWithCGRect:CGRectMake(0, 0, 300, 300)]];
    //    keyTimes:值代表了出现动画的时刻, 值得范围是0~1, 值必须是递增的, keyTimes和values是一一对应的
        keyFrame.keyTimes = @[@(0.4), @(0.6), @(1)];
        //3 添加动画
        [self.changeView.layer addAnimation:keyFrame forKey:@"keyFrame"];
        */
        CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"];
        [keyFrame setDuration:10];
        keyFrame.values = @[(id)[UIColor redColor].CGColor, (id)[UIColor orangeColor].CGColor, (id)[UIColor yellowColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor];
        //keyTimes中的第一个值是0, 不能修改
        keyFrame.keyTimes = @[@(0.3), @(0.5), @(0.6), @(0.7), @(0.9)];
        [self.changeView.layer addAnimation:keyFrame forKey:nil];
    }
     
    //    CATransaction 过度动画
    - (IBAction)pressTransition:(id)sender {
        //1 创建
        CATransition *transition = [CATransition animation];
        [transition setDuration:2];
        //2 设置过度样式
        transition.type = kCATransitionReveal;//控制样式
        transition.subtype = kCATransitionFromTop;//控制方向
        //添加动画
        [self.changeView.layer addAnimation:transition forKey:nil];
    }
     
    //    CAAnimationGroup 组动画
    - (IBAction)pressAnimationGroup:(id)sender {
         
        //1 创建并指定要修改的属性
        //    KeyPath:CAlayer的属性名, 不是所有的属性都可以, 只有在头文件中出现animatable的属性才可以, 可以修改属性的属性, 例如:bounds.size
        //    CALayer
        CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"bounds"];
        [basic setDuration:2];
        //2 修改属性值
        basic.fromValue = [NSValue valueWithCGRect:CGRectMake(00, self.changeView.bounds.size.width, self.changeView.bounds.size.height)];
        basic.toValue = [NSValue valueWithCGRect:CGRectMake(00300300)];
         
        CAKeyframeAnimation *keyFrame = [CAKeyframeAnimation animationWithKeyPath:@"backgroundColor"];
        [keyFrame setDuration:5];
        keyFrame.values = @[(id)[UIColor redColor].CGColor, (id)[UIColor orangeColor].CGColor, (id)[UIColor yellowColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor];
        //keyTimes中的第一个值是0, 不能修改
        keyFrame.keyTimes = @[@(0.3), @(0.5), @(0.6), @(0.7), @(0.9)];
         
         
         
        // 创建
        //当group动画的时长 > 组中所有动画的最长时长, 动画的时长以组中最长的时长为准
        //当group动画的时长 < 组中所有动画的最长时长, 动画的时长以group的时长为准
        //最合适: group的时长 = 组中所有动画的最长时长
        CAAnimationGroup *group = [CAAnimationGroup animation];
        [group setDuration:10];
        //设置组动画
        group.animations = @[basic, keyFrame];
        //添加动画
        [self.changeView.layer addAnimation:group forKey:nil];
    }
    @end
  • 相关阅读:
    js总结:增加和减少文本框
    java总结:字符串切割
    Spring-----ioc
    Hibernate之二级缓存
    Hibernate之HQL
    Hibernate关联关系(一对多自关联 ,多对多)
    Hibernate关联关系(一对多)
    Hibernate之主键生成策略
    如何使用hibernate完成CRUD操作
    Struts2-----文件上传与拦截器原理
  • 原文地址:https://www.cnblogs.com/fuunnyy/p/4713034.html
Copyright © 2011-2022 走看看