NSString drawInRect перекрывает все символы - PullRequest
2 голосов
/ 26 октября 2009

Я пытаюсь заполнить некоторый текст градиентной заливкой, где я устанавливаю режим рисования текста на обрезку, а затем рисую градиентную заливку. Проблема в том, что всякий раз, когда я устанавливаю режим рисования текста на клип, каждый символ текстовой строки помещается поверх друг друга, а не рисуется в последовательности, образующей слово - это наиболее странно!

Мой код выглядит так:

CGRect r = CGRectInset(self.frame, 55, 8);      

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

CGFloat components[8] = {44/255, 54/255, 66/255, 1.0
            ,75/255, 92/255, 111/255, 1.0};
CGFloat locations[2] = {0, 1};

// draw the text's gradient fill
CGGradientRef gradient = CGGradientCreateWithColorComponents(colorSpace, components, locations, 2);

CGContextSetTextDrawingMode(context, kCGTextClip);


[monthString drawInRect:r withFont:f lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter];

CGContextFillRect(context, CGRectMake(0, 0, 320, 20));

1 Ответ

2 голосов
/ 26 октября 2009

Похоже, что дополнения UIKit NSString, которые позволяют вам делать drawInRect: withFont: и тому подобное, плохо работают с режимом рисования kCGTextClip. Я видел такое же поведение, и в этом ответе я предоставляю код для заполнения текста градиентом, используя вызовы рисования из чистого кварца. Недостатком этого подхода является то, что вы ограничены кодировкой текста MacRoman, в которой отсутствует поддержка многих символов Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...