zoukankan      html  css  js  c++  java
  • 音乐波形图动画效果

    音乐波形图动画效果

    注意

    经过测试,后期会发热严重,有优化的必要,但目前还没有处理。

    效果

    源码

    https://github.com/YouXianMing/Animations

    //
    //  MusicBarAnimationController.m
    //  Animations
    //
    //  Created by YouXianMing on 16/1/15.
    //  Copyright © 2016年 YouXianMing. All rights reserved.
    //
    
    #import "MusicBarAnimationController.h"
    #import "GCD.h"
    
    @interface MusicBarAnimationController ()
    
    @property (nonatomic, strong) GCDTimer  *timer;
    
    @end
    
    @implementation MusicBarAnimationController
    
    - (void)setup {
    
        [super setup];
        
        self.view.backgroundColor = [UIColor blackColor];
        
        CGFloat width  = self.contentView.frame.size.width;
        CGFloat height = self.contentView.frame.size.height;
        
        CAReplicatorLayer *replicatorLayer = [CAReplicatorLayer layer];
        [self.contentView.layer addSublayer:replicatorLayer];
        
        replicatorLayer.frame              = CGRectMake(0, 0, width, height);
        replicatorLayer.position           = self.view.center;
        replicatorLayer.borderWidth        = 0.5f;
        replicatorLayer.instanceCount      = width / 8;
        replicatorLayer.masksToBounds      = YES;
        replicatorLayer.instanceTransform  = CATransform3DMakeTranslation(-8.0, 0.0, 0.0);
        replicatorLayer.instanceDelay      = 0.5f;
        
        CALayer *layer        = [CALayer layer];
        layer.frame           = CGRectMake(width - 4, height, 4, height);
        layer.backgroundColor = [UIColor blackColor].CGColor;
        layer.cornerRadius    = 2.f;
        [replicatorLayer addSublayer:layer];
        
        self.timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
        [self.timer event:^{
            
            CABasicAnimation *colorAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
            colorAnimation.toValue           = (id)[UIColor colorWithRed:arc4random() % 256 / 255.f
                                                                   green:arc4random() % 256 / 255.f
                                                                    blue:arc4random() % 256 / 255.f
                                                                   alpha:1].CGColor;
            
            CABasicAnimation *positionAnimation = [CABasicAnimation animationWithKeyPath:@"position.y"];
            positionAnimation.toValue           = @(layer.position.y - arc4random() % ((NSInteger)height - 64));
            
            CAAnimationGroup *group = [CAAnimationGroup animation];
            group.duration          = 1.f;
            group.autoreverses      = true;
            group.repeatCount       = CGFLOAT_MAX;
            group.timingFunction    = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
            group.animations        = @[colorAnimation, positionAnimation];
            [layer addAnimation:group forKey:nil];
            
        } timeIntervalWithSecs:1.f delaySecs:1.f];
        [self.timer start];
    }
    
    @end

    细节

  • 相关阅读:
    ES8 Async 和 Await
    js中字节B转化成KB,MB,GB
    理解与使用JavaScript中的回调函数
    JavaScript与函数式编程
    Deno 意味着什么?
    call、apply、bind
    测量JavaScript函数的性能的简单方法及与其他方式对比
    promise
    SQL游标原理和使用方法
    SQL循环语句
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5134505.html
Copyright © 2011-2022 走看看