2011-06-11 6 views
5

के रूप में प्रतिपादन करना मैंने एक जटिल UIBezierPath बनाया है जो कई पथ खंड, ठोस, धराशायी, रेखाएं, रंग, arcs इत्यादि से बना है। इसलिए मेरे पास यह है और अब मैं चाहता हूं इसे एक CGContext में प्रस्तुत करने के लिए।आईफोन - एक CGBath को UIBezierPath की प्रतिलिपि बनाना और मूल

तो, मैं इसे एक CGPathReference

CGPathRef cgPath = CGPathCreateCopy(aBezierPath.CGPath); 
समस्या

का उपयोग कर में बदलने का यह है: सिद्धांत रूप में, अगर मैं एक CGContext पर एक मार्ग बनाना चाहते हैं, मैं स्ट्रोक, मोटाई, रंग, रेखा को परिभाषित करने के लिए है स्टाइल, ब्लेंडिंग मोड इत्यादि। प्रत्येक सेगमेंट के लिए अलग होना चाहिए, लेकिन UIBezierPath मैंने पहले से ही बनाई है, यह सारी जानकारी है।

तो, मुझे आश्चर्य है कि सीजीपीएन्टेक्स्ट पर सीजीपाथ को "टिकट" करने का कोई तरीका है, तो यह सभी मूल जानकारी के साथ मुद्रित होगा?

धन्यवाद।

+1

क्या आप केवल UIBezierPath की स्ट्रोक विधि का उपयोग नहीं कर सकते हैं? –

उत्तर

6

डीआर, आप सही हैं: यह बहुत भ्रमित है!

लेकिन मुझे लगता है कि टॉम सही है, बस [aBezierPath स्ट्रोक] का उपयोग करें।

तो, यह कुछ इस तरह होगा:

REF है एक (CGContextRef) है जो आप का निर्माण किया है।

YOURBEZIERPATH एक (UIBezierPath *) है।

अपरिहार्य रूप से आप "उल्टा ड्राइंग" मुद्दे से निपटने के लिए है, तो:

UIGraphicsPushContext(REF); 
CGContextSaveGState(REF); 
CGContextTranslateCTM(REF, 0, the height*); 
CGContextScaleCTM(REF, 1.0, -1.0); 
[YOURBEZIERPATH stroke]; 
CGContextRestoreGState(REF); 
UIGraphicsPopContext(); 

तो हो गया।

री से नीचे आपकी टिप्पणी: मेरे पास UIBezierPaths की एक सरणी है। प्रत्येक बेजियर की अपनी शैली और रंग होता है।

क्या इससे मदद मिलती है? ... पाश के लिए बदलें एक "स्ट्रोक" कॉल, एक साथ:

UIGraphicsPushContext(REF); 
CGContextSaveGState(REF); 
CGContextTranslateCTM(REF, 0, the height*); 
CGContextScaleCTM(REF, 1.0, -1.0); 

for each of YOURBEZIERPATH in your array... 
    { 
    CGContextSaveGState(REF); 
    [YOURBEZIERPATH stroke]; 
    CGContextRestoreGState(REF); 
    } 

CGContextRestoreGState(REF); 
UIGraphicsPopContext(); 

आप वास्तव में aBezierPath.CGPath, या, उसके एक प्रति का उपयोग कर परेशान करने के लिए जरूरत नहीं है।

फिर आप सही हैं, यह बहुत भ्रमित है, यूआई और सीजी की दो दुनिया !!


* ऊंचाई: अक्सर self.frame.size.height की तरह कुछ। मैं इसे भविष्य में सामान्य उदाहरण कोड की तलाश में किसी के लिए शामिल करता हूं।

+0

धन्यवाद, यह लगभग मेरे लिए काम करता है। मेरी एकमात्र समस्या यह है: मेरे पास UIBezierPaths की एक सरणी है जिसे मुझे संदर्भ में आकर्षित करना है। प्रत्येक बेजियर की अपनी शैली और रंग होता है। जब मैं लूप में पथों को स्ट्रोक करने के लिए आपकी विधि का उपयोग करता हूं, हर बार आपकी विधि कहलाती है, तो पहले से स्ट्रोक किए गए सभी पथ, अंतिम निर्दिष्ट शैली में बदल जाते हैं। उदाहरण के लिए: मेरे पास 3 पथ हैं: धराशायी/नीला, ठोस/लाल, ठोस/हरा। पहले रन के बाद मेरे पास एक धराशायी/नीला पथ है। दूसरे भाग के बाद, मेरे पास दो ठोस/लाल पथ हैं और तीसरे भाग के बाद, सभी पथ ठोस/हरे रंग में बदल जाते हैं। – SpaceDog

+0

धन्यवाद जो, मुझे कुछ अवधारणाओं को गलती हुई थी लेकिन अब यह जादू की तरह काम कर रही है। धन्यवाद!!! – SpaceDog

+0

नहीं, मैंने उलटा किया, हर बार जब मुझे कुछ अपडेट करने की ज़रूरत होती है तो मैं सभी पथ खींचता हूं। जैसा कि मैंने सोचा था, सभी पथों को आकर्षित करना उतना धीमा नहीं है, फिर यह बहुत अच्छी तरह से काम कर रहा है। – SpaceDog