iOS 實現文字漸變的三種方法

1

本文講述三種方式實現文字漸變效果:

  • 使用colorWithPatternImage
  • CAGradientLayer設置mask
  • 自定義label在drawRect里使用文字mask繪制漸變
1、使用colorWithPatternImage

這是最簡單的實現漸變的方式,一行代碼搞定

_label.textColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"3.png"]];

使用這種不僅僅可是實現漸變效果,還可以根據圖片內容實現不同的視覺效果,例如:

圖片紋理效果
2、CAGradientLayer設置mask
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
    gradientLayer.colors = @[(id)[UIColor redColor].CGColor, (id)[UIColor greenColor].CGColor, (id)[UIColor blueColor].CGColor];
    //gradientLayer.locations = @[@0, @0.5, @1];// 默認就是均勻分布
    gradientLayer.startPoint = CGPointMake(0, 0.5);
    gradientLayer.endPoint = CGPointMake(1, 0.5);
    gradientLayer.frame = _label2.frame;
    gradientLayer.mask = _label2.layer;
    _label2.layer.frame = gradientLayer.bounds;
    [self.view.layer addSublayer:gradientLayer];
3、自定義label在drawRect里使用文字mask繪制漸變

注意自定義label的backgroundColor要設置成clearColor

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    // 獲取文字mask
    [@"我只在乎你" drawInRect:self.bounds withAttributes:@{NSFontAttributeName : self.font}];
    CGImageRef textMask = CGBitmapContextCreateImage(context);
    
    // 清空畫布
    CGContextClearRect(context, rect);
    
    // 設置蒙層
    CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextClipToMask(context, rect, textMask);
    
    // 繪制漸變
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGFloat locations[] = {0, 0.5, 1};
    CGFloat colors[] = {1.0,0.0,0.0,1.0,
                        0.0,1.0,0.0,1.0,
                        0.0,0.0,1.0,1.0};
    CGGradientRef gradient=CGGradientCreateWithColorComponents(colorSpace, colors, locations, 3);
    CGPoint start = CGPointMake(0, self.bounds.size.height / 2.0);
    CGPoint end = CGPointMake(self.bounds.size.width, self.bounds.size.height / 2.0);
    CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation);
    
    // 釋放
    CGColorSpaceRelease(colorSpace);
    CGGradientRelease(gradient);
    CGImageRelease(textMask);
}

如有紕漏歡迎指正,如果你還有其他實現方式歡迎交流。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,241評論 4 61
  • 數算恩福 1.感恩媽媽,每當天氣變冷,她總會提醒我要給兒子添衣加被,謝謝親愛的媽媽,我愛你!謝謝謝謝謝謝! 2.感...
    lrryy閱讀 168評論 2 1
  • 【游戲在時光中】 聽懂了,拿到了,感覺體內很多東西在涌動,在拱動。原來如彼。往往此時,什么也不想說。整堂課深深地哭...
    徐慕靈閱讀 259評論 0 0
  • 牙齒是否美麗,決定了你笑容的美麗度。笑容的美蘊含著個人的追求、自信、積極樂觀。當你給別人微笑時,一副美麗潔白的牙齒...
    陳漁Banana閱讀 300評論 0 0