IT虾米网

iOS动画之模拟音量振动条详解

leader 2018年06月23日 手机开发 380 0

音量振动条

效果图:

这里写图片描述

如果实现?

创建3个layer,按顺序播放y轴缩放动画

利用CAReplicatorLayer实现

1、什么是CAReplicatorLayer?

一种可以复制自己子层的layer,并且复制出来的layer和原生子层有同样的属性,位置,形变,动画。

2、CAReplicatorLayer属性

  • instanceCount: 子层总数(包括原生子层)
  • instanceDelay: 复制子层动画延迟时长
  • instanceTransform: 复制子层形变(不包括原生子层),每个复制子层都是相对上一个。
  • instanceColor: 子层颜色,会和原生子层背景色冲突,因此二者选其一设置。
  • instanceRedOffset、instanceGreenOffset、instanceBlueOffset、instanceAlphaOffset: 颜色通道偏移量,每个复制子层都是相对上一个的偏移量。

如果利用CAReplicatorLayer实现

1.首先创建复制layer,音乐振动条layer添加到复制layer上,然后复制子层就好了。

CAReplicatorLayer *layer = [CAReplicatorLayer layer]; 
 
    layer.frame = CGRectMake(50, 50, 200, 200); 
 
    layer.backgroundColor = [UIColor lightGrayColor].CGColor; 
 
    [self.view.layer addSublayer:layer];

2.先创建一个音量振动条,并且设置好动画,动画是绕着底部缩放,设置锚点

    CALayer *bar = [CALayer layer]; 
 
    bar.backgroundColor = [UIColor redColor].CGColor; 
 
    bar.bounds = CGRectMake(0, 0, 30, 100); 
 
    bar.position = CGPointMake(15, 200); 
 
    bar.anchorPoint = CGPointMake(0.5, 1); 
 
    [layer addSublayer:bar]; 
 
    CABasicAnimation *anim = [CABasicAnimation animation]; 
 
    anim.keyPath = @"transform.scale.y"; 
 
    anim.toValue = @(0.1); 
 
    anim.autoreverses = YES; 
 
    anim.repeatCount = MAXFLOAT; 
 
    [bar addAnimation:anim forKey:nil];

3.复制子层
   // 设置4个子层,3个复制层 
    layer.instanceCount = 4; 
 
    // 设置复制子层的相对位置,每个x轴相差40 
    layer.instanceTransform = CATransform3DMakeTranslation(40, 0, 0); 
 
    // 设置复制子层的延迟动画时长 
    layer.instanceDelay = 0.3;

Demo实例

https://github.com/Esdeath/volumeBar

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

IOS 手势学习(点击,长按,轻扫,拖拽,旋转,捏合缩放)详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。