2009-10-26 3 views
2

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

Мой код выглядит следующим образом:

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

ответ

2

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

Смежные вопросы