我遇到了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);
谢谢!
答案 0 :(得分:0)
逐字尝试并画画?