• CAShapeLayer实现音量大小动态改变


    我是效果图

           实现如图这效果一般会直接通过多张图进行切换进行完成。但这样的处理,会浪费App的资源存储空间,而且效率也不高。那么今天我们用CAShapeLayer实现以下吧。

     拆分:

    1.一个椭圆
    2.一个矩形, 控制高度实现动画效果
    3.一个圆弧
    4.横线和竖线
    

    添加图层和视图

    CAShapeLayer *_shapeLayer2; // 矩形图层
    UIView *_dynamicView; // 放置椭圆外框的视图
    

    实现代码

    - (void)voiceAnimation
    {
    UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 145)];
    backView.backgroundColor = [UIColor grayColor];
    backView.center = self.view.center;
    [self.view addSubview:backView];
    
    // 外部轮廓View
    _dynamicView = [[UIView alloc] initWithFrame:CGRectMake(85, 30, 30, 60)];
    _dynamicView.layer.cornerRadius = 15;
    _dynamicView.layer.masksToBounds = YES;
    _dynamicView.clipsToBounds = YES;
    [backView addSubview:_dynamicView];
    
    // 添加椭圆
    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:_dynamicView.bounds cornerRadius:15];
    shapeLayer.path = path.CGPath;
    shapeLayer.strokeColor = [UIColor whiteColor].CGColor;
    shapeLayer.fillColor = [UIColor clearColor].CGColor;
    shapeLayer.lineWidth = 3.0f;
    [_dynamicView.layer addSublayer:shapeLayer];
    
    // 添加矩形
    CGFloat height = 30;
    _shapeLayer2 = [CAShapeLayer layer];
    UIBezierPath *path2 = [UIBezierPath bezierPathWithRect:CGRectMake(0, 60 - height, 30, height)];
    _shapeLayer2.path = path2.CGPath;
    _shapeLayer2.fillColor = [UIColor whiteColor].CGColor;
    [_dynamicView.layer addSublayer:_shapeLayer2];
    
    // 添加圆弧
    CAShapeLayer *shapeLayer3 = [CAShapeLayer layer];
    shapeLayer3.frame = backView.bounds;
    UIBezierPath *path3 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(70, 35, 60, 65)];
    shapeLayer3.path = path3.CGPath;
    shapeLayer3.strokeStart = 0.00f;
    shapeLayer3.strokeEnd = 0.50f;
    shapeLayer3.fillColor = [UIColor clearColor].CGColor;
    shapeLayer3.lineWidth = 5.0f;
    shapeLayer3.strokeColor = [UIColor whiteColor].CGColor;
    [backView.layer addSublayer:shapeLayer3];
    
    // 添加竖线
    CAShapeLayer *shapeLayer4 = [CAShapeLayer layer];
    shapeLayer4.frame = backView.bounds;
    UIBezierPath *path4 = [UIBezierPath bezierPath];
    [path4 moveToPoint:CGPointMake(100, 100)];
    [path4 addLineToPoint:CGPointMake(100, 115)];
    shapeLayer4.path = path4.CGPath;
    shapeLayer4.lineWidth = 5.0f;
    shapeLayer4.strokeColor = [UIColor whiteColor].CGColor;
    [backView.layer addSublayer:shapeLayer4];
    
    // 画横线
    CAShapeLayer *shapeLayer5 = [CAShapeLayer layer];
    shapeLayer5.frame = backView.bounds;
    UIBezierPath *path5 = [UIBezierPath bezierPath];
    [path5 moveToPoint:CGPointMake(85, 115)];
    [path5 addLineToPoint:CGPointMake(115, 115)];
    shapeLayer5.path = path5.CGPath;
    shapeLayer5.lineWidth = 5.0f;
    shapeLayer5.strokeColor = [UIColor whiteColor].CGColor;
    [backView.layer addSublayer:shapeLayer5];
    }
    

    改变大小的代码

    - (void)refreshUIWithVoicePower:(CGFloat)voicePower
    {
    NSLog(@"%f", voicePower);
    [_shapeLayer2 removeFromSuperlayer];
    _shapeLayer2 = nil;
    // 添加矩形
    CGFloat height = 60 * voicePower;
    _shapeLayer2 = [CAShapeLayer layer];
    UIBezierPath *path2 = [UIBezierPath bezierPathWithRect:CGRectMake(0, 60 - height, 30, height)];
    _shapeLayer2.path = path2.CGPath;
    _shapeLayer2.fillColor = [UIColor whiteColor].CGColor;
    [_dynamicView.layer addSublayer:_shapeLayer2];
    }
    
  • 相关阅读:
    函数——数组排序
    函数的主要内容
    火影忍者多人对战
    商场打折结构体
    【Linux】- ls命令详解
    【Python】- 如何使用Visual Studio 2013编写python?
    C# MD5 32位加密 UTF-8编码
    设计模式六大原则
    机器学习入门-数值特征-进行二值化变化 1.Binarizer(进行数据的二值化操作)
    机器学习入门-数值特征-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) 4.pd.get_dummies(直接对特征进行one-hot编码)
  • 原文地址:https://www.cnblogs.com/Milo-CTO/p/7890725.html
Copyright © 2020-2023  润新知