会员金闪闪动画字体 (CATextLayer + CAGradientLayer)

效果

代码

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
@interface ViewController ()
{
    CATextLayer *textLayer;
    CAGradientLayer *gradientLayer;
    UIView* bgView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, self.view.frame.size.height - 40, self.view.frame.size.width, 40);
[btn setTitle:@"开始动画" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];
[btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[self.view addSubview:btn];

bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 40, self.view.frame.size.width, self.view.frame.size.width)];
bgView.backgroundColor = [UIColor brownColor];
[self.view addSubview:bgView];

textLayer = [CATextLayer layer];
textLayer.frame = CGRectMake((bgView.frame.size.width - 200)/2, (bgView.frame.size.width - 200)/2, 200, 200);
textLayer.foregroundColor = [UIColor blackColor].CGColor;
textLayer.alignmentMode =kCAAlignmentJustified;
textLayer.wrapped =YES;
UIFont *font = [UIFont systemFontOfSize:30];
CFStringRef fontName = (__bridge CFStringRef)font.fontName;
CGFontRef fontRef =CGFontCreateWithFontName(fontName);
textLayer.font = fontRef;
textLayer.fontSize = font.pointSize;
CGFontRelease(fontRef);
NSString *text =@"习惯不曾习惯的习惯会习惯 舍得不曾舍得的舍得会舍得";
textLayer.string = text;
textLayer.contentsScale = [UIScreen mainScreen].scale;
[bgView.layer addSublayer:textLayer];
//创建背景图层
gradientLayer =  [CAGradientLayer layer];
[gradientLayer setColors:[NSArray arrayWithObjects:
                          (id)[UIColorFromRGB(0x000000) CGColor],
                          (id)[UIColorFromRGB(0xFFD700) CGColor],
                          (id)[UIColorFromRGB(0x000000) CGColor],
                          (id)[UIColorFromRGB(0xFFD700) CGColor],
                          (id)[UIColorFromRGB(0x000000) CGColor],
                          (id)[UIColorFromRGB(0xFFD700) CGColor],
                          (id)[UIColorFromRGB(0x000000) CGColor],
                          (id)[UIColorFromRGB(0xFFD700) CGColor],
                          (id)[UIColorFromRGB(0x000000) CGColor],
                          (id)[UIColorFromRGB(0xFFD700) CGColor],
                          (id)[UIColorFromRGB(0x000000) CGColor],
                          (id)[[UIColor clearColor] CGColor],
                          nil]];
gradientLayer.frame = bgView.bounds;
[gradientLayer setLocations:[NSArray arrayWithObjects:
                             [NSNumber numberWithFloat:0.0],
                             [NSNumber numberWithFloat:0.1],
                             [NSNumber numberWithFloat:0.2],
                             [NSNumber numberWithFloat:0.3],
                             [NSNumber numberWithFloat:0.4],
                             [NSNumber numberWithFloat:0.5],
                             [NSNumber numberWithFloat:0.6],
                             [NSNumber numberWithFloat:0.7],
                             [NSNumber numberWithFloat:0.8],
                             [NSNumber numberWithFloat:0.9],
                             [NSNumber numberWithFloat:1.0],
                             nil]];

[gradientLayer setStartPoint:CGPointMake(0, 0)];
[gradientLayer setEndPoint:CGPointMake(1, 1)];
[gradientLayer setMask:textLayer]; //用progressLayer来截取渐变层
[bgView.layer addSublayer:gradientLayer];
}
- (void)clickBtn{
//动画
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
CGPoint fromPoint = textLayer.position;
CGPoint toPoint = CGPointMake(fromPoint.x + (bgView.frame.size.width - 200)/2, fromPoint.y);
animation.duration = 1;
animation.fromValue = http://blog.csdn.net/xiaoxiaobukuang/article/details/[NSValue valueWithCGPoint:fromPoint];
animation.toValue = [NSValue valueWithCGPoint:toPoint];
animation.autoreverses = YES;
[textLayer addAnimation:animation forKey:nil];

CABasicAnimation *animation2 = [CABasicAnimation animationWithKeyPath:@"position"];
CGPoint fromPoint2 = gradientLayer.position;
CGPoint toPoint2 = CGPointMake(fromPoint.x - (bgView.frame.size.width - 200)/2, fromPoint.y);
animation2.duration = 1;
animation2.fromValue = http://blog.csdn.net/xiaoxiaobukuang/article/details/[NSValue valueWithCGPoint:fromPoint2];
animation2.toValue = [NSValue valueWithCGPoint:toPoint2];
animation2.autoreverses = YES;
[gradientLayer addAnimation:animation2 forKey:nil];
}
原文地址:https://www.cnblogs.com/sunyanyan/p/5360192.html