Ios NSString drawAtPoint:和kCGTextFillClip,为什么';这不管用吗?
我面临NSString方法drawAtPoint和kCGTextFillClip的问题。我需要创建一个带有渐变而不是简单颜色的UILabel,所以我对它进行了子类化,并覆盖了drawRect方法。通过使用函数CGContextShowTextAtPoint,我成功地得到了我想要的,但是它不能正确处理UTF-8,这对我来说是至关重要的 我知道这是一个常见的问题,所以在搜索了一些之后,我发现我可以使用drawAtPoint来解决这个编码问题。事实上,文本现在正得到恰当的展示。问题是我不知道如何让kCGTextFillClip继续工作 看这张照片 正如你所看到的,它似乎刚好夹在第一个字母上,但不是在那之后。你知道如何解决这个问题吗 以下是我使用的代码:Ios NSString drawAtPoint:和kCGTextFillClip,为什么';这不管用吗?,ios,uilabel,gradient,quartz-graphics,Ios,Uilabel,Gradient,Quartz Graphics,我面临NSString方法drawAtPoint和kCGTextFillClip的问题。我需要创建一个带有渐变而不是简单颜色的UILabel,所以我对它进行了子类化,并覆盖了drawRect方法。通过使用函数CGContextShowTextAtPoint,我成功地得到了我想要的,但是它不能正确处理UTF-8,这对我来说是至关重要的 我知道这是一个常见的问题,所以在搜索了一些之后,我发现我可以使用drawAtPoint来解决这个编码问题。事实上,文本现在正得到恰当的展示。问题是我不知道如何让kC
- (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);
谢谢大家! 试着一个字母一个字母地画?这是个好主意。你知道一个简单的方法吗?还是我必须检查字母之间的间距并相应地画出来?那将是一场噩梦。