2009-08-06 9 views
8

मैं एक ऐप पर काम कर रहा हूं जहां मैं स्क्रीन पर टेक्स्ट प्रदर्शित करने के लिए CGContextShowTextAtPoint का उपयोग कर रहा हूं। मैं जापानी अक्षरों को भी प्रदर्शित करना चाहता हूं, लेकिन CGContextShowTextAtPoint इसके इनपुट को एक सी स्ट्रिंग के रूप में लेता है। तो या तो ए) मैं जापानी अक्षरों को सी स्ट्रिंग में कैसे बदलूं? यदि यह संभव नहीं है, बी) मैं स्क्रीन पर जापानी वर्ण मैन्युअल रूप से कैसे मुद्रित कर सकता हूं (drawRect विधि के भीतर)।जापानी वर्णों के लिए आईफोन CGContextShowTextAtPoint

अग्रिम धन्यवाद।

उत्तर

5

CoreText आप मदद कर सकते हैं:

  1. CTFontGetGlyphsForCharacters (आईओएस 3.2 के बाद) ग्लिफ़
  2. CTFontDrawGlyphs को यूनिकोड वर्ण (आईओएस 4.2 के बाद) एक CGContext में ग्लिफ़ ड्रॉ मैप करता है।

एनबी। CGContextShowGlyphs काम करना चाहिए, लेकिन मुझे अपने यूनीचर्स को ग्लिफ में बदलने का कोई तरीका नहीं मिला। अधिक है कि here पर:

प्राचीन, पूर्व आईओएस 3.2 जवाब

आप इस के लिए UIKit का उपयोग करने की जरूरत है।

प्रारंभ करने के लिए [NSString drawAtPoint:...] देखें।

यह SO question भी उपयोगी है।

मुझे नहीं पता कि वे कोरग्राफिक टेक्स्ट सामग्री के साथ क्या सोच रहे थे, यह बेकार है।

+0

धन्यवाद :)! डॉक्स में थोड़ा पढ़ने के बाद, ऐसा लगता है कि मैंने NSAttributedString क्लास की लाइनों के साथ कुछ कोड किया है, इसलिए मुझे लगता है कि अब मुझे अपना पूरा कोड उस पर स्विच करना चाहिए :( – kiyoshi

+0

आपका स्वागत है। Ps आईफोन पर कोई एनएसएएसटीईटीस्ट्रिंग नहीं है, तो एनएसएलएबल देखें। –

+0

कोर ग्राफिक्स टेक्स्ट ड्राइंग रूटीन मैक पर काफी समय से आसपास रहे हैं, मैं अनुमान लगा रहा हूं कि यूनिकोड समर्थन सामान्य हो गया है, इसलिए यह आश्चर्य की बात नहीं है कि वे केवल उनके द्वारा निर्धारित चरित्र सेट का समर्थन करते हैं। आप CGContextShowGlyphsAtPoint() के साथ कस्टम वर्णों को प्रिंट करने में भी सक्षम हो सकते हैं, लेकिन चुनौती आईफोन पर ग्लिफ उत्पन्न कर रही है। इस पोस्ट में एक उदाहरण है: http://www.gogo-robot.com/devblog/?p=5 –

1

इसके लायक होने के लिए, मैंने कोरग्राफिक्स में जापानी पात्रों को अच्छी तरह से काम करने की कोशिश करने में काफी समय लगाया, और यह पसंद नहीं आया कि यह मुझे कहां छोड़ दिया।

अंत में मैंने पाठ को संभालने के लिए UILabels का उपयोग करने के लिए स्विच किया। मुझे आवश्यक सभी कोरग्राफिक्स जैसी चीजों को & एनीमेशन समर्थन का उपयोग करके दोहराया जा सकता है, और अंत में परिणामी कोड बहुत आसान था।

यह आपकी स्थिति के लिए उपयुक्त नहीं हो सकता है, लेकिन यह विचार करने लायक है।

3

मैं जेन्स Egeblad द्वारा CGFontGetGlyphsForUnichars की एक reimplementation का उपयोग करके यह काम कर प्राप्त करने में सक्षम था:

// 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); 
फिर

आप: GlyphDrawing.mm

एप्लिकेशन बंडल से एक otf फ़ाइल के रूप में एक जापानी फ़ॉन्ट में सबसे पहले लोड अपने यूनिवर टेक्स्ट को ग्लिफ में परिवर्तित कर सकते हैं और उन्हें आकर्षित कर सकते हैं:

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

कहां क्या मैं GlyphDrawing.mm डाउनलोड कर सकता हूँ? लिंक टूटा हुआ है। –

0

यह शायद आपको% विषय स्टार्टर% में मदद करता है। महान सलाह के लिए लयबद्ध फिस्टमैन के लिए धन्यवाद!

CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSelectFont (context, [self.font.fontName cStringUsingEncoding:NSASCIIStringEncoding], self.font.pointSize, kCGEncodingMacRoman); 
    CGContextSetCharacterSpacing(context, characterSpacing); 
    CGContextSetFillColorWithColor(context, [self.textColor CGColor]); 
    CGAffineTransform myTextTransform = CGAffineTransformScale(CGAffineTransformIdentity, 1.f, -1.f); 
    CGContextSetTextMatrix (context, myTextTransform); 

    CGGlyph glyphs[self.text.length]; 
    CTFontRef fontRef = CTFontCreateWithName((CFStringRef)self.font.fontName, self.font.pointSize, NULL); 
    CTFontGetGlyphsForCharacters(fontRef, (const unichar*)[self.text cStringUsingEncoding:NSUnicodeStringEncoding], glyphs, self.text.length); 
    float centeredY = (self.font.pointSize + (self.frame.size.height- self.font.pointSize)/2)-2; 
    CGContextShowGlyphsAtPoint(context, rect.origin.x, centeredY, (const CGGlyph *)glyphs, self.text.length); 
    CFRelease(fontRef); 
संबंधित मुद्दे