CAGradientLayer
CAGradientLayer可以方便的處理顏色漸變实胸。
@property(nullable, copy) NSArray *colors; //顏色數(shù)組
@property(nullable, copy) NSArray<NSNumber *> *locations;//坐標(biāo)數(shù)組
@property CGPoint startPoint;//開始坐標(biāo)
@property CGPoint endPoint;//結(jié)束坐標(biāo)
動畫1
//創(chuàng)建遮蓋
- (void)createMask
{
CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = self.bounds;
//透明顏色會透明,實體顏色就是主色調(diào)
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)];
//坐標(biāo)軸類似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; //無限重復(fù)
basicAnimation.removedOnCompletion = NO; //完成之后不移除
basicAnimation.fillMode = kCAFillModeForwards;
[_frontLabel.layer.mask addAnimation:basicAnimation forKey:nil];
}
動畫2
- (void)createMask
{
CAGradientLayer *layer = [CAGradientLayer layer];
//設(shè)置大小
layer.frame = self.bounds;
//設(shè)置顏色組
layer.colors = @[(id)[UIColor clearColor].CGColor,(id)[UIColor redColor].CGColor,(id)[UIColor clearColor].CGColor];
//設(shè)置范圍
layer.locations = @[@(0.25),@(0.5),@(0.75)];
//重左到右
layer.startPoint = CGPointMake(0, 0);
layer.endPoint = CGPointMake(1, 0);
//添加遮蓋
_frontLabel.layer.mask = layer;
//設(shè)置邊框
_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];
}