2009-08-06 8 views
8

Pracuję nad aplikacją, w której używam CGContextShowTextAtPoint do wyświetlania tekstu na ekranie. Chcę również wyświetlać znaki japońskie, ale CGContextShowTextAtPoint przyjmuje jako ciąg znaków ciąg C. A więc A) Jak zmienić znaki japońskie na ciąg C? Jeśli nie jest to możliwe, B) Jak mogę ręcznie drukować japońskie znaki na ekranie (w ramach metody drawRect).Iphone CGContextShowTextAtPoint dla znaków japońskich

Z góry dziękuję.

Odpowiedz

5

CoreText może pomóc:

  1. CTFontGetGlyphsForCharacters (iOS 3.2 i późniejszych) mapuje znaków Unicode glifów
  2. CTFontDrawGlyphs (iOS 4.2 roku) Rysuje glify w CGContext.

NB. CGContextShowGlyphs powinien działać, ale nigdy nie znalazłem sposobu na konwersję moich UniChars na glify. Więcej na ten temat here:

Starożytnej, wstępnie iOS 3.2 odpowiedź

trzeba użyć UIKit do tego.

Aby rozpocząć, sprawdź numer [NSString drawAtPoint:...].

Przydaje się także ta SO question.

Nie wiem, co myślą z tekstem CoreGraphic, jest bezużyteczny.

+0

Dzięki :)! Po przeczytaniu trochę w Dokumentach, wydaje mi się, że zakodowałem coś na wzór klasy NSAttributedString, więc myślę, że powinienem teraz zamienić cały mój kod na :( – kiyoshi

+0

Nie ma za co. Ps Na telefonie iPhone nie ma NSAttributeString, więc sprawdź NSLabel. –

+0

Rutyny rysowania rdzenia graficznego są na komputerze Mac od dłuższego czasu. Zgaduję, że zanim obsługa Unicode stała się powszechna, nie jest to zbyt zaskakujące, że wspierają tylko zestaw znaków, który robią. Możliwe jest również drukowanie niestandardowych znaków za pomocą CGContextShowGlyphsAtPoint(), ale wyzwaniem jest generowanie glifów na telefonie iPhone. Ten post ma przykład: http://www.gogo-robot.com/devblog/?p=5 –

1

Za to, co warto, spędziłem dużo czasu, próbując sprawić, by japońskie postacie działały dobrze w CoreGraphics, i nie spodobały mi się miejsca, w którym mnie opuściły.

W końcu przełączyłem się na używanie UILabeli do obsługi tekstu. Wszystkie potrzebne mi elementy CoreGraphics można było replikować za pomocą transformacji &, a wynikowy kod był znacznie prostszy.

Może to nie być odpowiednie dla Twojej sytuacji, ale warto się nad tym zastanowić.

3

udało mi się uzyskać tej pracy za pomocą powtórną implementację CGFontGetGlyphsForUnichars Jens Egeblad: GlyphDrawing.mm

pierwsze obciążenie w japońskiej czcionki jako plik OTF z aplikacji pakietu:

// Load font file from otf file 
NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"HStdNW8" ofType:@"otf"]; 
CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]); 
CGFontRef _cgFont = CGFontCreateWithDataProvider(fontDataProvider); 
CGDataProviderRelease(fontDataProvider); 

Wtedy można przekonwertować tekst unichar na glify i narysować je:

NSString *text = @"日本語" 
CGContextSetFont(context, _cgFont); 
CGContextSetFontSize(context, 12); 
CGGlyph textGlyphs[[text length]]; 

unichar textChars[[text length]]; 
for(int i = 0; i < [text length]; i++) { 
    textChars[i] = [text characterAtIndex:i]; 
} 
CMFontGetGlyphsForUnichars(_cgFont, textChars, textGlyphs, [text length]); 
CGContextShowGlyphsAtPoint(context, xCoord, yCoord, textGlyphs, [text length]); 
+1

Gdzie czy mogę pobrać GlyphDrawing.mm? Link jest zepsuty. –

0

To może pomóc użytkownikowi%%%. Dzięki Rhythmic Fistman za wspaniałą radę!