iOS動畫之類比音量震動條
音量震動條:
如果實現?
建立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;