2011-09-04 17 views
8

Sto usando CATextLayer, per utilizzare un carattere personalizzato in iOS, so che c'è un modo semplice per usare un carattere personalizzato con Fonts provided by application ma questo è un font diverso. Mi stavo chiedendo c'è un modo per cambiare la spaziatura tra ogni personaggio? Non ho trovato nessuna proprietà per farlo!CATextLayer e tracciamento/spaziatura tra caratteri

Modificato:

- (void)viewWillAppear:(BOOL)animated { 
    CTFontRef font = [self newCustomFontWithName:@"yeki" 
              ofType:@"ttf" 
             attributes:[NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:16.f] 
                      forKey:(NSString *)kCTFontSizeAttribute]]; 


    CGRect screenBounds = [[UIScreen mainScreen] bounds]; 

    normalTextLayer_ = [[CATextLayer alloc] init]; 
    normalTextLayer_.font = font; 
    normalTextLayer_.string = str; 
    normalTextLayer_.wrapped = YES; 
    normalTextLayer_.foregroundColor = [[UIColor purpleColor] CGColor]; 
    normalTextLayer_.fontSize = 50.f; 
    normalTextLayer_.alignmentMode = kCAAlignmentRight; 

    normalTextLayer_.frame = CGRectMake(0.f,100.f, screenBounds.size.width, screenBounds.size.height /1.f); 
    [self.view.layer addSublayer:normalTextLayer_]; 
    CFRelease(font); 
} 
+2

Intendi il kerning? Puoi provare a usare 'CGContextSetCharacterSpacing'. –

+0

sì, ma non ho trovato alcuna soluzione con 'CGContextSetCharacterSpacing' per la classe CATextLayer! –

+0

nessuna risposta ???? –

risposta

12

È possibile assegnare un NSAttributedString (o NSMutableAttributedString) invece di un semplice NSString al livello e utilizzare l'attributo kCTKernAttributeName (vedi Core Text String Attributes Reference) per regolare la spaziatura.

Esempio:

CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica"), 30, NULL); 
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: 
          (id)font, kCTFontAttributeName, 
          [NSNumber numberWithFloat:15.0], kCTKernAttributeName, 
          (id)[[UIColor greenColor] CGColor], kCTForegroundColorAttributeName, nil]; 
NSAttributedString *attributedString = [[[NSAttributedString alloc] initWithString:@"Hello World" attributes:attributes] autorelease]; 
CFRelease(font); 
myTextLayer.string = attributedString; 

Questo dovrebbe dare il testo verde in Helvetica 30 con spaziatura maggiore.

+0

grazie. e vorresti dire come posso usare questo: 'kCTKernAttributeName' perché quando sostituisco la mia stringa CATextLayer con' NSAttributedString' il mio testo perde alcuni effetti come colori, caratteri personalizzati ed ecc ... –

+0

Vedi la mia domanda modificata per vedere il mio codice : –

+0

Gli attributi di colore e carattere di 'CATextLayer' si applicano solo a stringhe semplici perché un' NSAttributedString' definisce i propri attributi che possono essere applicati a intervalli diversi all'interno della stringa (caratteri diversi possono avere colori diversi ...). È possibile utilizzare 'initWithString: attributes' per inizializzare la stringa attribuita con un dizionario di attributi che si applicano all'intera stringa. Vedere la documentazione a cui mi sono collegato per una panoramica degli attributi disponibili. – omz

Problemi correlati