2009-11-30 5 views
9

Gibt es eine Möglichkeit festzustellen, ob ein Unicode-Zeichen in einer Schriftart auf dem iPhone vorhanden ist, d. H., Ob das Zeichen einem druckbaren Zeichen oder stattdessen dem quadratischen Symbol "fehlendes Zeichen" zugeordnet wird?Wie erkennt man, ob ein Unicode-Zeichen dem Quadrat des fehlenden Symbols zugeordnet ist?

Zum Beispiel, wenn ich einen zufälligen Wingding Charakter dieses Schnipsel generieren mag:

NSString *s = [NSString stringWithFormat:@"%C", (0x2700 + (arc4random() % 0x0100))]; 

ist es eine Möglichkeit zu sagen, ob die erzeugte Zeichenfolge als kleinen Platz machen wird, oder eine echte Glyphe, wenn ich ziehe es damit:

[s drawAtPoint:x withFont:[UIFont systemFontOfSize:30]]; 

Danke!

... R

Antwort

0

Ich weiß nicht, irgendeines Verfahrens, das speziell für diese überprüft, jedoch stelle ich mir es möglich sein, würde ein NSDictionary mit gepaarte Werte für jede Tabelle von Zeichen in Unicode codiert einzurichten Führen Sie dann eine Prüfung durch, um sicherzustellen, dass der generierte Wert in die Bereiche fällt, die von einem der gepaarten Werte angegeben werden.

1

NSFont hat eine Eigenschaft coveredCharacterSet, die UIFont nicht hat. Daher würde ich empfehlen, den Desktop-PC zu benutzen, um die coveredCharacterSet-Informationen zu erstellen und sie in Ihre iphone App zu übertragen.

Eine Liste von Schriftarten, die auf dem iPhone verfügbar sind, können unter: http://daringfireball.net/misc/2007/07/iphone-osx-fonts

0

Warum es auf Ihrem Computer nicht generieren, wenn Sie die Systemschriftart verwenden es Helvetica sein sollte, und es gibt die Zeichen Karten in die Schriftart Menüoption von fast jedem Programm.

1

Ich konnte dies mit Core-Text des CTFontGetGlyphsForCharacters erreichen:

- (BOOL)isInCharSet:(unichar)character 
{ 
    CTFontRef fontRef = CTFontCreateWithName((CFStringRef)@"Arial", 0.0, NULL); 
    unichar characters[] = {character}; 
    CGGlyph glyphs[] = {}; 

    return (BOOL)CTFontGetGlyphsForCharacters(fontRef, characters, glyphs, 1); 
}