Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSString drawAtPoint:和kCGTextFillClip,为什么';这不管用吗?_Ios_Uilabel_Gradient_Quartz Graphics - Fatal编程技术网

Ios NSString 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

我面临NSString方法drawAtPoint和kCGTextFillClip的问题。我需要创建一个带有渐变而不是简单颜色的UILabel,所以我对它进行了子类化,并覆盖了drawRect方法。通过使用函数CGContextShowTextAtPoint,我成功地得到了我想要的,但是它不能正确处理UTF-8,这对我来说是至关重要的

我知道这是一个常见的问题,所以在搜索了一些之后,我发现我可以使用drawAtPoint来解决这个编码问题。事实上,文本现在正得到恰当的展示。问题是我不知道如何让kCGTextFillClip继续工作

看这张照片

正如你所看到的,它似乎刚好夹在第一个字母上,但不是在那之后。你知道如何解决这个问题吗

以下是我使用的代码:

- (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);

谢谢大家!

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

这是个好主意。你知道一个简单的方法吗?还是我必须检查字母之间的间距并相应地画出来?那将是一场噩梦。