CAGradientLayer
CAGradientLayer可以方便的处理颜色渐变。
@property(nullable, copy) NSArray *colors; //颜色数组
@property(nullable, copy) NSArray<NSNumber *> *locations;//坐标数组
@property CGPoint startPoint;//开始坐标
@property CGPoint endPoint;//结束坐标
动画1
//创建遮盖
- (void)createMask
{
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = self.bounds;
//透明颜色会透明,实体颜色就是主色调
layer.colors = @[(id)[UIColor clearColor],(id)[UIColor blueColor].CGColor,(id)[UIColor blackColor].CGColor,(id)[UIColor clearColor].CGColor];
//每个颜色站的范围,
layer.locations = @[@(0.01),@(0.1),@(0.9),@(0.99)];
//坐标轴类似0.0原点1,1右下角
layer.startPoint = CGPointMake(0, 0);
layer.endPoint = CGPointMake(1, 0);
_frontLabel.layer.mask = layer;
_frontLabel.layer.borderWidth = 1;
}
//动画的时候覆盖layer开始平移向右,移开之后就显示了下面的颜色
- (void)fadeRightWithDuration:(NSTimeInterval)duration
{
CABasicAnimation *basicAnimation = [CABasicAnimation animation];
basicAnimation.keyPath = @"transform.translation.x";
basicAnimation.fromValue = @(0); //起始
basicAnimation.toValue = @(self.bounds.size.width); //控件的宽度
basicAnimation.duration = duration; //时间
basicAnimation.repeatCount = LONG_MAX; //无限重复
basicAnimation.removedOnCompletion = NO; //完成之后不移除
basicAnimation.fillMode = kCAFillModeForwards;
[_frontLabel.layer.mask addAnimation:basicAnimation forKey:nil];
}
动画2
- (void)createMask
{
CAGradientLayer *layer = [CAGradientLayer layer];
//设置大小
layer.frame = self.bounds;
//设置颜色组
layer.colors = @[(id)[UIColor clearColor].CGColor,(id)[UIColor redColor].CGColor,(id)[UIColor clearColor].CGColor];
//设置范围
layer.locations = @[@(0.25),@(0.5),@(0.75)];
//重左到右
layer.startPoint = CGPointMake(0, 0);
layer.endPoint = CGPointMake(1, 0);
//添加遮盖
_frontLabel.layer.mask = layer;
//设置边框
_frontLabel.layer.borderWidth = 1;
_frontLabel.layer.backgroundColor = [UIColor blueColor].CGColor;
//把遮罩向左偏移,让他能够重最左边开始
layer.position = CGPointMake(-self.bounds.size.width/4.0, self.bounds.size.height/2.0);
}
- (void)iPhoneFadeWithDuration:(NSTimeInterval)duration
{
CABasicAnimation *basicAnimation = [CABasicAnimation animation];
basicAnimation.keyPath = @"transform.translation.x";
basicAnimation.fromValue = @(0);
basicAnimation.toValue = @(self.bounds.size.width+self.bounds.size.width/2.0);
basicAnimation.duration = duration;
basicAnimation.repeatCount = LONG_MAX;
basicAnimation.removedOnCompletion = NO;
basicAnimation.fillMode = kCAFillModeForwards;
[_frontLabel.layer.mask addAnimation:basicAnimation forKey:nil];
}