NSString drawAtPoint:和kCGTextFillClip,为什么不工作?

时间:2010-11-04 15:32:32

标签: ios uilabel gradient quartz-graphics

我遇到了NSString方法drawAtPoint和kCGTextFillClip的问题。我需要使用渐变而不是简单的颜色创建UILabel,因此我将其子类化并覆盖了drawRect方法。我设法通过使用CGContextShowTextAtPoint函数得到了我想要的东西,但它没有正确处理UTF-8,这对我来说很重要。

我知道这是一个常见的问题所以在搜索了一下之后,我发现我可以使用drawAtPoint来解决这个编码问题。实际上,该文本现在正在显示。问题是我不知道如何使kCGTextFillClip工作了。

查看result

正如你所看到的,它似乎很好地剪辑到第一个字母,但之后却没有。你对如何解决这个问题有任何想法吗?

这是我正在使用的代码:

- (void)drawRect:(CGRect)rect { 
CGContextRef theContext = UIGraphicsGetCurrentContext();
CGRect viewBounds = self.bounds;

CGContextSaveGState(theContext);

CGContextTranslateCTM(theContext, 0.0, viewBounds.size.height/2 + 1);

CGContextSetTextDrawingMode(theContext, kCGTextFillClip);

[self.text drawAtPoint:CGPointMake(0, 0) withFont:[UIFont fontWithName:@"Helvetica-Bold" size:11.5]];

// Creation of the gradient
CGFloat locations[2] = { 0.0f, 1.0f };
CGFloat components[8] = { 
    190.0/255, 190.0/255, 190.0/255, 1.0, // Start color
    113.0/255, 113.0/255, 113.0/255, 1.0 // End color
};
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, 2);

CGPoint topCenter = CGPointMake(CGRectGetMidX(viewBounds), 0.0f);
CGPoint midCenter = CGPointMake(CGRectGetMidX(viewBounds), CGRectGetMidY(viewBounds));


CGContextDrawLinearGradient(theContext, gradient, topCenter, midCenter, 0);

谢谢!

1 个答案:

答案 0 :(得分:0)

逐字尝试并画画?