5

所以我想根据在 Photoshop 中制作的渐变为 UILabel 设置文本颜色。我有渐变的 rgb 值,{211,119,95} 和 {199,86,56}。这可能吗?我该怎么做?

4

2 回答 2

14

如果您想定位 iOS 6+,另一种方法是 UIColor 的类别

您从渐变创建 UIColor:

+ (UIColor*) gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withHeight:(int)height
{
  CGSize size = CGSizeMake(1, height);
  UIGraphicsBeginImageContextWithOptions(size, NO, 0);
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();

  NSArray* colors = [NSArray arrayWithObjects:(id)c1.CGColor, (id)c2.CGColor, nil];
  CGGradientRef gradient = CGGradientCreateWithColors(colorspace, (CFArrayRef)colors, NULL);
  CGContextDrawLinearGradient(context, gradient, CGPointMake(0, 0), CGPointMake(0, size.height), 0);

  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

  CGGradientRelease(gradient);
  CGColorSpaceRelease(colorspace);
  UIGraphicsEndImageContext();

  return [UIColor colorWithPatternImage:image];
}

然后用 attrString 作为你的 NSMutableAttributeString:

[attrString addAttribute:NSForegroundColorAttributeName value:[UIColor gradientFromColor:[UIColor greenColor] toColor:[UIColor redColor] withHeight:labelView.height] range:defaultRange];
labelView.attributedString = attrString;

或者如果您不需要笔触或其他样式效果,则只需设置 textColor

labelView.textColor = [UIColor gradientFromColor:[UIColor greenColor] toColor:[UIColor redColor] withHeight:labelView.height];

瞧,它在 UILabel 超过一行时效果更好,否则您必须根据字体(UIFont.leading)计算行高并将其传递给方法,背景将垂直重复。

于 2013-10-14T19:49:23.713 回答
2

您可能希望使用以下可自定义标签之一:

于 2013-04-09T14:48:26.077 回答