2017-04-18 77 views
1

iOS SDK是否可以在UILabel中以两种颜色垂直着色文本,如图像 - 上半部分是灰色,下半部分是白色?垂直使用2种颜色的UILabel

enter image description here

感谢

+1

试试这个HTTPS ://www.cocoacontrols.com/controls/leffectlabel –

+0

使用CAGra在标签上添加子图层dientLayer –

+0

试试这个链接它工作正常:http://stackoverflow.com/a/41316298/3901620 – KKRocks

回答

2

你可以尝试用图像设置颜色的标签,

添加以下方法

func getGradientImage(_ bounds:CGRect) -> UIImage { 

    let gradientLayer = CAGradientLayer() 

    gradientLayer.colors = [ 
     UIColor(red: 0.596, green: 0.839, blue: 0.929, alpha: 1.00).cgColor, 
     UIColor(red: 0.169, green: 0.302, blue: 0.408, alpha: 1.00).cgColor 
    ] 

    gradientLayer.startPoint = CGPoint.zero 
    gradientLayer.endPoint = CGPoint(x: 1, y: 1) // changing start and end point value you can set vertical or horizontal 
    gradientLayer.locations = [0.5,1] 
    gradientLayer.bounds = bounds 
    UIGraphicsBeginImageContextWithOptions(gradientLayer.bounds.size, true, 0.0) 

    let context = UIGraphicsGetCurrentContext() 
    gradientLayer.render(in: context!) 
    let image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 
    return image! 
} 

并设置颜色为您的标签一样

yourLabel.textColor = UIColor(patternImage: getGradientImage(yourLabel.bounds)) 
+0

感谢您的想法 –

+0

我的荣幸。 – dip

0

是的,你可以跟CoreGarphics的帮助:

步骤一:

下面的功能让你的文字BezierPath - >

-(UIBezierPath*)getPathOfStr{ 
UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:64]; 
    CGFontRef fontref = CGFontCreateWithFontName((__bridge CFStringRef)font.fontName); 
    NSString *unichars = @"I"; 
    CFStringRef yourFriendlyCFString = (__bridge CFStringRef)unichars; 
    CGGlyph glyphs = CGFontGetGlyphWithGlyphName(fontref, yourFriendlyCFString); 
    CTFontRef fontCT = CTFontCreateWithName((__bridge CFStringRef)font.fontName, font.pointSize, NULL); 
    CGPathRef cgpath = CTFontCreatePathForGlyph(fontCT, glyphs, nil); 
    UIBezierPath *path = [UIBezierPath bezierPathWithCGPath:cgpath]; 
    NSLog(@"Complete path For p is %@", path); 
    CGPathApply(cgpath, (__bridge void * _Nullable)(bezierPoints), MyCGPathApplierFunc); 
    NSLog(@"Points on path %@", bezierPoints); 

return path; 
} 

第二步:

现在制作一个渐变图层,并用您的文本路径将其遮罩,使用填充颜色=清除颜色,以便渐变图层将从文本中可见。

+0

这是在目标C或迅速答案? – KKRocks

+0

对不起,犯了一个错误。 代码编辑。 –