2010-11-04 27 views
1

Je suis confronté à un problème avec la méthode NSString drawAtPoint et kCGTextFillClip. J'avais besoin de créer un UILabel avec un dégradé au lieu d'une simple couleur, donc je l'ai sous-classé et j'ai dépassé la méthode drawRect. J'ai réussi à obtenir ce que je voulais en utilisant la fonction CGContextShowTextAtPoint, mais elle ne gère pas correctement UTF-8, ce qui est essentiel pour moi. Je suis conscient qu'il s'agit d'un problème commun. Après avoir cherché un peu, j'ai découvert que je pouvais utiliser drawAtPoint pour résoudre ce problème d'encodage. En effet, le texte montre maintenant correctement. Le problème est que je ne sais plus comment faire fonctionner kCGTextFillClip. Voir le result. Comme vous pouvez le voir, il semble très bien couper la première lettre, mais pas après. Avez-vous une idée sur la façon de résoudre ce problème?NSString drawAtPoint: et kCGTextFillClip, pourquoi cela ne fonctionne-t-il pas?

Voici le code que je utilise:

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

Merci!

Répondre

0

Essayez et dessinez lettre par lettre?

+0

C'est une bonne idée. Connaissez-vous un moyen simple de le faire ou devrais-je vérifier l'espacement entre les lettres et les dessiner en conséquence? Ce serait un cauchemar. – DrMonkey68