2017-04-18 7 views
1

iOS SDKではUILabelのテキストを縦に2色、たとえば上半分が灰色、下半分が白色になります。UILabelは垂直に2色に着色されています

enter image description here

おかげ

+1

のようなあなたのラベルに色を設定し、ラベルに画像とカラー設定を試すことができます://www.cocoacontrols.com/controls/leffectlabel –

+0

CAGraを使ってラベルにサブレイヤを追加するdientLayer –

+0

これはうまく動作するこのリンクを試してください:http://stackoverflow.com/a/41316298/3901620 – KKRocks

答えて

2

あなたは、HTTPS、これを試してみてください

は、以下の方法

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の助けを借りて行うことができます

ステップ1:

機能以下に、あなたのテキストの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; 
} 

ステップ2:

グラデーションレイヤーを作成し、塗りつぶし色=クリアカラーのテキストパスでマスクして、グラデーションレイヤーをテキストから見えるようにします。

+0

これは客観的なCまたは迅速にこの答えですか? – KKRocks

+0

申し訳ありませんが、間違いをしました。 コードが編集されました。 –

関連する問題