2010-05-13 7 views
1

J'essaie de tracer une corde en utilisant du quartz 2d. Ce que je fais est, je dessine chaque lettre de la chaîne individuellement, parce que chaque lettre a des attributs spéciaux qui lui sont associés, en prenant chaque lettre dans une nouvelle chaîne.Police personnalisée. Garder la largeur de police identique

La chaîne est imprimée, mais l'espace entre les lettres n'est pas uniforme. Il a l'air très moche à lire. J'ai lu quelque chose à propos de l'utilisation de polices personnalisées. Mais je n'ai aucune idée, si je peux le faire !! mon code est ici.

- (void) drawRect : (CGRect)rect{ 
    NSString *[email protected]"My Name Is Adam"; 
    float j=0; 
    const char *charStr=[string cStringUsingEncoding: NSASCIIStringEncoding]; 

    for(int i=0;i<strlen(charStr);i++) 


    { 
     NSString *str=[NSString stringWithFormat:@"%c",charStr[i]]; 
     const char *s=[str cStringUsingEncoding:NSASCIIStringEncoding]; 
     NSLog(@"%s",s); 

     CGContextRef context=[self getMeContextRef]; 
     CGContextSetTextMatrix (context,CGAffineTransformMakeScale(1.0, -1.0)) ; 
     CGContextSelectFont(context, "Arial", 24, kCGEncodingMacRoman); 
    //CGContextSetCharacterSpacing (context, 10); 



     CGContextSetRGBFillColor (context, 0,0,200, 1); 
     CGContextSetTextDrawingMode(context,kCGTextFill); 
     CGContextShowTextAtPoint(context, 80+j,80,s,1); 
     j=j+15; 

} 

} 

Dans la sortie 'Mon nom est Adam' est imprimé mais l'espace entre les lettres n'est pas uniforme. Y at-il un moyen de rendre l'espace uniforme !!!

Répondre

1

En général, chaque caractère a une avance différente, vous devez donc en tenir compte lorsque vous dessinez votre texte. Au lieu d'utiliser j, procédez comme suit:

// ... 
CGContextSetTextPosition(initX,initY); 
for(...){ 
    // ... 
    CGPoint pos = CGContextGetTextPosition(context); 
    CGContextSetTextPosition(pos.x+extraSpace,pos.y); 
    CGContextShowText(context,s,1); 
    // ... 
} 

mis extraSpacing à zéro pour obtenir l'espacement par défaut de la police.

En outre, je ne suis pas sûr quels attributs vous utilisez, mais pourquoi n'utilisez-vous pas simplement NSAttributedString (ou CF*)?

+0

'NSAttributedString' n'est pas encore disponible sur l'iPhone. –

+0

hein, je n'ai pas remarqué! 'CFAttributedString' est là, mais il n'y a pas d'API pour gérer son dessin ... Intéressant! – mohsenr

1

Utilisez une police à largeur fixe/non proportionnelle telle que Monaco ou Courier. Laisse moi savoir les résultats.

+0

ouais Courier a travaillé. Mais Monaco ne fonctionne pas. pouvez-vous me dire le nom d'autres polices non-proportionnées/fixes. Coz Courier est trop simple et Monaco ne montre rien – Rahul

+0

Vous pourriez essayer de dessiner chaque caractère séparément, déplaçant la position x d'un montant fixe. – gnasher

Questions connexes