ios - NSString drawAtPoint : and kCGTextFillClip, 为什么不起作用?

标签 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);

谢谢!

最佳答案

试着一个字母一个字母地画?

关于ios - NSString drawAtPoint : and kCGTextFillClip, 为什么不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4098315/

相关文章:

matplotlib - 如何使用连续值 `matplotlib` 调色板为 [`seaborn` 散点图着色?]

ios - UITableView 部分删除问题

ios - Xcode iOS 应用程序在启动时崩溃:无法创建 lldb_private::Process

ios - 以编程方式创建 UILabel 并设置其位置

Swift - 如何隐藏标签,然后在按下按钮后使其永远显示?

html - 不清楚 CSS3 渐变中的百分比 % 符号

iOS NSURLSession,如何在 didCompleteWithError 中重试

ios - 无法满足约束时,如何识别 Debug 区域中的 View ?

ios - 有没有一种方法可以隐式地使按钮成为多行?

css - LESS 中的径向渐变混合不起作用?