У меня проблема с методами 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);
Спасибо!