NSString drawAtPoint: и kCGTextFillClip, почему это не работает? - PullRequest
1 голос
/ 04 ноября 2010

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

Спасибо!

1 Ответ

0 голосов
/ 06 ноября 2010

Попробуйте нарисовать букву за буквой?

...