2010-12-18 12 views
7

से पिक्सेल समन्वय प्राप्त करें कोर टेक्स्ट के साथ दिए गए पाठ के लिए NSRange से मुझे CGRect कैसे मिलेगा?कोर टेक्स्ट - एनएसआरेंज

मैं कोर टेक्स्ट का उपयोग NSAttributedString के साथ कर रहा हूं।

उत्तर

9

यह एक पूर्ण दर्द है लेकिन किया जा सकता है।

आप CTFrameGetLines() का उपयोग कर फ्रेम में लाइनों के सभी प्राप्त करने के लिए, अगर उनके चरित्र रेंज रेंज आप CTLineGetStringRange() का उपयोग कर के लिए देख रहे है की जाँच करें, CTLineGetTypographicBounds() का उपयोग कितना बड़ा लाइन ही प्रस्तुत करना होगा खोजने के लिए और उपयोग की जरूरत है, CTLineGetOffsetForStringIndex() सीमा के प्रारंभ/अंत चरित्र की वास्तविक स्थिति निर्धारित करने के लिए (यदि रेखा वांछित सीमा का केवल एक उपखंड है)।

इन सभी को जोड़कर और ऑफसेट और ऊंचाइयों को जोड़ना और आपको वह चाहिए जो आप चाहते हैं। ध्यान दें कि CTLineGetImageBounds() ग्राफिक्स संदर्भ के बिना काम नहीं करता है (और, जो मैं इकट्ठा करता हूं, वह वैसे भी महंगा है) और इस समस्या को हल करने के लिए आवश्यक नहीं है।

+0

एक विस्तृत उत्तर, बहुत बहुत धन्यवाद! इस तरह की चीजों के लिए आवश्यक सभी कार्यों को ढूंढना हमेशा दर्द होता है। :) – Joshua

+1

@ जोशुआ आप इस उत्तर को लागू करते समय अपना कोड साझा कर सकते हैं ?? मुझे लगता है कि मुझे कुछ समस्या है और इसे 3 सप्ताह तक हल नहीं किया जा सकता है, कृपया मेरी मदद करें ... –

+0

@Risma मैं वास्तव में इसे लागू करने के लिए कभी नहीं मिला लेकिन आपको जो भी चाहिए वह शॉन के उत्तर में है। – Joshua

2

FIrst उस रेखा को निर्धारित करता है जिसमें आप झूठ में रुचि रखते हैं। फिर लाइन की शुरुआत से एक विशिष्ट स्ट्रिंग स्थिति का ऑफसेट प्राप्त करने के लिए CTLineGetOffsetForStringIndex() पर कॉल करें। CTLineGetImageBounds() के साथ, आपकी सीमा में पहले और अंतिम वर्णों की CGPoint स्थिति की गणना करना संभव होना चाहिए।