2010-05-05 8 views
7

में टेक्स्ट की बाउंडिंग रेक्ट ढूँढना मैं कोर टेक्स्ट में टेक्स्ट की एक पंक्ति की सीमाओं को खोजने की कोशिश कर रहा हूं। सादगी के लिए, मान लें कि इसमें एक ही चरित्र है। फिलहाल मैं निम्न विधि का उपयोग कर रहा:कोर टेक्स्ट

line = CTLineCreateWithAttributedString(attrString); 
rect = CTLineGetImageBounds(line, context); 

यह समय की सबसे काम करता है, लेकिन कुछ वर्ण, जैसे गणित इटैलिक घ के लिए (यूनिकोड: 0x1D451) या गणित इटैलिक क्ष (यूनिकोड: 0x1D45E), चौड़ाई थोड़ी छोटी है।

मैं CTLineGetTypographicBounds() या CTFramesetterSuggestFrameSizeWithConstraints उपयोग करने की कोशिश, लेकिन वे या तो मदद नहीं के रूप में फॉन्ट ही इटैलिक नहीं है, मैं भी नहीं कर सकते हैं (मैं वे चौड़ाई, अपने ग्राफिकल चौड़ाई नहीं। लगता है ग्लिफ़ की अग्रिम का उपयोग लगता है) था इसे ठीक करने के लिए स्लैंट कोण का उपयोग करें।

मैंने सीधे ग्लाइफ तक पहुंचने और CTFontCreatePathForGlyph() का उपयोग करने का प्रयास किया, लेकिन सीजीजीलीफ और यूनीचर दोनों 16-बिट्स के रूप में विफल रहे और मुझे 32-बिट वर्णों की आवश्यकता है।

क्या किसी को पता है कि मैं कुछ गलत कर रहा हूं? यदि हां, तो सही तरीका क्या है?

अद्यतन:

यकीन है कि यह फ़ॉन्ट से संबंधित एक समस्या नहीं है बनाने के लिए, मैं अलग फोंट का इस्तेमाल किया। एरियल इटालिक में ASCII वर्णों के लिए भी समस्या मौजूद है।

अद्यतन:

मेरे पिछले अद्यतन पर ध्यान न दें! यह यह पता चला है (एरियल इटालिक के साथ समस्या) मेरी अपनी बग थी। हालांकि पहली समस्या अभी भी खड़ी है।

उत्तर

3

मैंने बनाई गई बग रिपोर्ट के बाद, जाहिर है यह दुर्लभ मामलों में दिखाई देने वाली कोरटेक्स्ट समस्या है। जैसे ही मुझे कोई फिक्स मिल जाए, आपको बताएगा।

अद्यतन: मार्च 15 '12

मैं इस जल्दी ही अद्यतन करने के लिए भूल गया, लेकिन यह तय हो गई है। फिक्स ओएस एक्स शेर/आईओएस 5 में है।

1

जहाँ तक मैं कह सकता हूं, CTLineGetImageBounds उपयोग करने के लिए सही कार्य है। मैं RadarWeb में एक बग रिपोर्ट दर्ज करने का सुझाव देता हूं।

+1

मैंने अभी एक बग दायर किया है। अगर मैं कुछ सुनूं तो आपको बता दूंगा। – mohsenr