Domanda

Sto tentando di riempire un po 'di testo con un riempimento sfumato, dove impostando la modalità di disegno del testo su ritaglio, quindi dipingo un riempimento sfumato. Il problema è che, ogni volta che imposto la modalità di disegno del testo su clip, ogni carattere della stringa di testo viene posizionato uno sopra l'altro, piuttosto che essere dipinto in una sequenza per formare una parola: è più bizzarro!

Il mio codice è simile al seguente:

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));
È stato utile?

Soluzione

Sembra che le aggiunte di UIKit NSString che ti permettono di fare drawInRect: withFont: e simili non giochino bene con la modalità di disegno kCGTextClip. Ho visto lo stesso comportamento e in questa risposta Fornisco il codice per riempire il testo con una sfumatura usando pure chiamate di disegno al quarzo. L'aspetto negativo di questo approccio è che sei limitato alla codifica del testo MacRoman, che non supporta il supporto di molti simboli Unicode.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top