zoukankan      html  css  js  c++  java
  • 核心动画

    核心动画
    // 所有的UIView  内部都有一个layer
        // 我们所看到的view的外形 都是layer显示的
       
        // 设置按钮内部图层的 圆角
        btn.layer.cornerRadius = 50;
        // 图层的边框颜色
    //    btn.layer.borderColor = [UIColor blackColor].CGColor;
    //    // 图层的边框宽度
    //    btn.layer.borderWidth = 5;
       
        // 阴影颜色
        btn.layer.shadowColor = [UIColor blackColor].CGColor;
        // 阴影透明度
        btn.layer.shadowOpacity = 1;
        // 阴影偏移量
        btn.layer.shadowOffset = CGSizeMake(5, 10);
        // 阴影半径
        btn.layer.shadowRadius = 7;
       
       
        // 单独创建一个图层
        CALayer *layer = [[CALayer alloc] init];
        layer.frame = CGRectMake(100, 300, 100, 100);
        layer.backgroundColor = [UIColor greenColor].CGColor;
        [self.view.layer addSublayer:layer];
    #pragma mark 转场动画
    - (void)bntClick
    {
        CATransition * transition =[CATransition animation];
        transition.duration = 1;
        //rippleEffect 水波
        transition.type = @"cube”;方块
        transition.subtype = kCATransitionFromRight;
    //两个view进行切换
        [self.view exchangeSubviewAtIndex:0 withSubviewAtIndex:1];
            [self.view.layer addAnimation:transition forKey:@"1"];
       }
    事务动画
     // 事务动画:用在修改图层的一些属性上
        [CATransaction begin];
        [CATransaction setAnimationDuration:1];
       
        // 控制动画的速度 (curve)
        [CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
        //    layer.frame = CGRectMake(200, 100, 50, 50);
            // 转换
    //    layer.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1);
       
        layer.transform = CATransform3DRotate(layer.transform, M_PI_2, 1, 1, 1);
            layer.transform = CATransform3DScale(layer.transform, 0.9, 0.9, 0.9);
           layer.transform = CATransform3DTranslate(layer.transform, 10, 10, 10);
          [CATransaction commit];
    基础动画
     /*
        // 基础动画 :控制图层每次改变(大小,位置,旋转)多少
        // keyPath 决定了要动画具体做什么事情
        // transform.rotation.x  旋转
        // transform.scale   刻度(放大缩小)
        // transform.translate(position)  移动位置
        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
        animation.duration = 0.5;
       
        // 从什么状态开始
        animation.fromValue = @(0);
        // 每次改变多少
        animation.byValue = @(M_PI);
        // 转到什么状态结束
    //    animation.toValue = @(20 * M_PI);
        // 动画重复多少次
    //    animation.repeatCount = 100;
        animation.repeatDuration = MAXFLOAT;
        // 动画做完之后  倒退回来
        animation.autoreverses = YES;

        [layer addAnimation:animation forKey:@"basic"];
         */
        CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
        animation.duration = 0.2;
        animation.fromValue = @(0.8);
        animation.toValue = @(1.5);
        animation.repeatCount = MAXFLOAT;
        animation.autoreverses = YES;
        [layer addAnimation:animation forKey:@"scaleAnimation"];
    关键帧动画
    // 关键帧动画:可以控制图层在不同的时间点的不同的状态
        // position   指动画的中心点
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
        animation.duration = 0.5;
       
        // 不同的状态
        animation.values = @[[NSValue valueWithCGPoint:CGPointMake(30, 80)],[NSValue valueWithCGPoint:CGPointMake(280, 80)],[NSValue valueWithCGPoint:CGPointMake(150, 80)],[NSValue valueWithCGPoint:CGPointMake(200, 80)]];
       
        //     到达不同的位置的时间点  里面是比例
        animation.keyTimes = @[@(0),@(0.4),@(0.7),@(1)];
            animation.removedOnCompletion = NO;
        animation.fillMode = kCAFillModeForwards;
       
        [layer addAnimation:animation forKey:@"position"];

    group动画
    - (void)viewDidLoad {
        [super viewDidLoad];
       
        imageView = [[UIImageView alloc] initWithFrame:CGRectMake(130, 20, 60, 60)];
        imageView.image = [UIImage imageNamed:@"123"];
        imageView.layer.cornerRadius = 30;
        imageView.clipsToBounds = YES;
        [self.view addSubview:imageView];
       
    }

    - (void)viewWillAppear:(BOOL)animated
    {
        // 旋转
        CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
        basic.duration = 1;
        basic.fromValue = @(0);
        basic.toValue = @(4 * M_PI);
        basic.repeatDuration = 3;

       
        // 往下落
        CAKeyframeAnimation *moveKeyframe= [CAKeyframeAnimation animationWithKeyPath:@"position"];
        moveKeyframe.values = @[[NSValue valueWithCGPoint:CGPointMake(160, 50)],[NSValue valueWithCGPoint:CGPointMake(160, 550)],[NSValue valueWithCGPoint:CGPointMake(160, 200)],[NSValue valueWithCGPoint:CGPointMake(160, 550)],[NSValue valueWithCGPoint:CGPointMake(160, 350)],[NSValue valueWithCGPoint:CGPointMake(160, 550)]];
        moveKeyframe.keyTimes = @[@(0),@(0.2),@(0.4),@(0.6),@(0.8),@(1)];
        moveKeyframe.timingFunctions = @[[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn],[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn],[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut],[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
       
       
        // 放大
        CAKeyframeAnimation *scaleKeyframe = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
        scaleKeyframe.values = @[@(1),@(1.5),@(1.3),@(1.5),@(1.4),@(1.5)];
        scaleKeyframe.keyTimes = @[@(0),@(0.2),@(0.4),@(0.6),@(0.8),@(1)];
       
        // 动画组
        CAAnimationGroup *group = [CAAnimationGroup animation];
        group.animations = @[basic,moveKeyframe,scaleKeyframe];
        group.duration = 3;
        group.removedOnCompletion = NO;
        group.fillMode = kCAFillModeForwards;
        [imageView.layer addAnimation:group forKey:@"group"];
        

  • 相关阅读:
    处理i18n国际电话区号的代码实践
    iOS 万能跳转界面方法 (runtime实用篇一)
    URI跳转方式地图导航的代码实践
    iOS @IBDesignable和@IBInspectable
    我的iOS高效编程秘诀—坚持编程习惯
    如何手动解析CrashLog
    小心别让圆角成了你列表的帧数杀手
    iOS开发之使用Runtime给Model类赋值
    POP介绍与使用实践(快速上手动画)
    NSString&NSMutableString常用操作梳理
  • 原文地址:https://www.cnblogs.com/LGX3399577/p/LGX.html
Copyright © 2011-2022 走看看