CAReplicatorLayer、音乐震动条

作者: 闲得一B | 来源:发表于2016-05-29 12:34 被阅读417次

CAReplicatorLayer能复制子层
也就是说,想要复制层,必须先让这个层成为CAReplicatorLayer的子层sublayer。

例:在一个UIView上复制层。
1、将CAReplicatorLayer创建的层添加到UIView的子层中或者设置为根层。
2、再讲手动创建的层设置为CAReplicatorLayer的子层。
3、此时CAReplicatorLayer的层调用instanceCount属性,并设置偏移量,设置颜色。
4、添加动画。

    CAReplicatorLayer *replicatorLayer = [[CAReplicatorLayer alloc]init];
    replicatorLayer.frame = self.view.bounds;
    replicatorLayer.backgroundColor = [UIColor whiteColor].CGColor;
    //设置为view的子层
    //[self.view.layer addSublayer:replicatorLayer];
    //设置为view根层
    [self.view setValue:replicatorLayer forKey:@"layer"];
    CALayer *layer = [[CALayer alloc]init];
    layer.frame = CGRectMake(100, 100, 10, 100);
    layer.backgroundColor = [UIColor redColor].CGColor;
    //设置为replicatorLayer的子层
    [replicatorLayer addSublayer:layer];
    replicatorLayer.instanceCount = 6;
     replicatorLayer.instanceTransform =  CATransform3DMakeTranslation(45, 0, 0);
    replicatorLayer.instanceDelay = 0.2;
>
    // 添加一个基本动画
    CABasicAnimation *anim = [[CABasicAnimation alloc]init];
    anim.keyPath = @"transform.scale.y";//改变y值
    anim.toValue = @0.1;
    anim.autoreverses = YES;//往返都有动画
    anim.repeatCount = MAXFLOAT;//执行次数
    //添加
    [layer addAnimation:anim forKey:nil];
效果
属性:

instanceCount:表示复制层里面有多少个子层,包括原始层。
instanceTransform:设置复制子层偏移量,不包括原始层,相对于前一个层的偏移量。
instanceDelay:设置复制层动画延迟时间,相对于前一个层的延迟时间。
instanceColor:设置层的颜色,(前提是要设置层的背景颜色,如果没有设置背景颜色,默认是透明的,再设置这个属性不会有效果。)
instanceGreenOffset:颜色的Green的渐变,相对于前一个层的渐变(取值从0 - 1)。


音乐震动条
#import "ViewController.h"
>
@interface ViewController ()
//视图中的view,记得拖线
@property (weak, nonatomic) IBOutlet UIView *lightView;
>
@end
>
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    // CAReplicatorLayer复制图层,可以把图层里面所有子层复制
    // 创建复制图层
    CAReplicatorLayer *repL = [CAReplicatorLayer layer];
>
    repL.frame = _lightView.bounds;
> 
    [_lightView.layer addSublayer:repL];
> 
    CALayer *layer = [CALayer layer];
  > 
    layer.anchorPoint = CGPointMake(0.5, 1);
    layer.position = CGPointMake(15, _lightView.bounds.size.height);
    layer.bounds = CGRectMake(0, 0, 30, 150);
    >
    layer.backgroundColor = [UIColor whiteColor].CGColor;
    >
    [repL addSublayer:layer];
    >
    CABasicAnimation *anim = [CABasicAnimation animation];
    >
    anim.keyPath = @"transform.scale.y";
    >
    anim.toValue = @0.1;
    >
    anim.duration = 0.5;
    >
    anim.repeatCount = MAXFLOAT;
    >
    // 设置动画反转
    anim.autoreverses = YES;
    >
    >
    [layer addAnimation:anim forKey:nil];
    >
    >
    // 复制层中子层总数
    // instanceCount:表示复制层里面有多少个子层,包括原始层
    repL.instanceCount = 3;
    >
    // 设置复制子层偏移量,不包括原始层,相对于原始层x偏移
    repL.instanceTransform = CATransform3DMakeTranslation(45, 0, 0);
    >
    // 设置复制层动画延迟时间
    repL.instanceDelay = 0.1;
>    
    // 如果设置了原始层背景色,就不需要设置这个属性
    repL.instanceColor = [UIColor greenColor].CGColor;
   > 
    repL.instanceGreenOffset = -0.3;
    >
    >
}
音乐振动条.gif
CAShapeLayer...
CAScrollLayer...

相关文章

网友评论

    本文标题:CAReplicatorLayer、音乐震动条

    本文链接:https://www.haomeiwen.com/subject/wjlqdttx.html