2012-02-23 12 views
5

जरूरत है मैं क्वार्ट्ज समझने के लिए 2 डी समन्वय प्रणाली, एप्पल संदर्भ गाइड वर्तमान में मैं पढ़ रहा हूँ और पुराने पुस्तक "मैक ओएस एक्स डेवलपर के लिए क्वार्ट्ज 2 डी ग्राफिक्स" कोशिश कर रहा हूँ में असमर्थ।को समझने के लिए आईओएस कोर ग्राफिक्स प्रणाली परिवर्तन समन्वय, सहायता

मैं उपयोगकर्ता-स्थान और डिवाइस-स्पेस अवधारणा की अवधारणा को समझता हूं कि डिवाइस-स्पेस में अलग-अलग डिफ़ॉल्ट समन्वय प्रणाली हो सकती है और डिवाइस-स्पेस निर्देशांक संशोधित नहीं किए जा सकते हैं, और हम इसके समन्वय प्रणाली को संशोधित करके उपयोगकर्ता-स्थान को मानचित्र बनाते हैं इच्छा परिणाम प्राप्त करने के लिए डिवाइस-स्थान पर।


  • समस्या का पहला भाग

क्वार्ट्ज मैक ओएस एक्स डेवलपर पुस्तक के लिए 2 डी ग्राफिक्स का कहना है:

जब एक समन्वय प्रणाली बदलने, आप होना आवश्यक है एक और इसकी तुलना करने के लिए समन्वय प्रणाली। परिवर्तन एक समन्वय प्रणाली से दूसरी ओर रिश्तेदार मैपिंग प्रदान करता है। जब आप तब्दील समन्वय प्रणाली में आकर्षित , परिवर्तन ग्राफिक वापस पहले के नक्शे समन्वय प्रणाली। निश्चित समन्वय प्रणाली में ग्राफिक की उपस्थिति परिवर्तन से प्रभावित होती है।

मैं बोल्ड में इस बिंदु नहीं मिला।

और

Quartz 2D programming guide का कहना है:

क्वार्ट्ज एक अलग डिवाइस स्वतंत्रता सिद्ध समन्वय प्रणाली उपयोगकर्ता यह उत्पादन की प्रणाली के समन्वय के लिए अंतरिक्ष मानचित्रण डिवाइस डिवाइस वर्तमान अंतरिक्ष का उपयोग कर परिवर्तन मैट्रिक्स, या सीटीएम। मैट्रिक्स एक गणितीय निर्माण है जो संबंधित समीकरणों के सेट को कुशलतापूर्वक वर्णन करने के लिए उपयोग किया जाता है। वर्तमान परिवर्तन मैट्रिक्स एक एक प्रकार का मैट्रिक्स है जिसे एफ़िन ट्रांसफॉर्म कहा जाता है, जो अंक को एक समन्वय स्थान से दूसरे में अनुवाद, रोटेशन, और स्केलिंग ऑपरेशंस (गणना जो चलती है, घूमती है, और समन्वय प्रणाली का आकार बदलकर) ।

वर्तमान परिवर्तन मैट्रिक्स एक माध्यमिक उद्देश्य है: यह अनुमति देता है आप को बदलने के लिए कैसे वस्तुओं तैयार कर रहे हैं। उदाहरण के लिए, बॉक्स को खींचने से पहले बॉक्स को घुमाने के लिए, आप बॉक्स को खींचने से पहले पृष्ठ (CTM) के समन्वय प्रणाली को घुमाएं। क्वार्ट्ज घुमावदार समन्वय प्रणाली का उपयोग कर आउटपुट डिवाइस पर खींचता है। अगर मैं एक वस्तु (छवि आदि) आकर्षित करने के लिए चाहते हैं घुमाया और बाहर रोटेशन के साथ अन्य तब क्या

भ्रम, कि "क्वार्ट्ज घुमाया समन्वय प्रणाली का उपयोग करते हुए आउटपुट डिवाइस को खींचता है।" क्या है? हमारे पास घुमाए गए पूरे निर्देशांक घुमाए गए हैं हर चीज खींची जाएगी?

मैं विभिन्न प्रयोगों कोशिश कर रहा हूँ, लेकिन इस के आसपास मेरे सिर लपेटो करने में असमर्थ है, मैं एक छवि मेरे दो लाइन नीचे नकल ड्राइंग बनाने में फ़ोटोशॉप समन्वय प्रणाली को छोड़ दिया और उसके बाद में CGContextRotateCTM(myContext, 45); फोन करके दिख कैसे निर्देशांक व्यवहार कर रहे हैं देखने के लिए अपने प्रोजेक्ट को जोड़ा गया सही विधि, लेकिन यह छवि के लिए कुछ भी नहीं किया जो मैंने xib फ़ाइल में इंटरफ़ेस बिल्डर का उपयोग करके छवि को uiimage के अंदर रखा था।

इस कोड क्वार्ट्ज 2 डी प्रोग्रामिंग गाइड

CGContextRef myContext = UIGraphicsGetCurrentContext(); 
CGRect contextRect = self.bounds; 

CGContextTranslateCTM(myContext, 0, contextRect.size.height); 
CGContextRotateCTM(myContext, 45); //my modification 
CGContextScaleCTM(myContext, 1, -1); 

float w, h; 
w = contextRect.size.width; 
h = contextRect.size.height; 

CGAffineTransform myTextTransform; 
CGContextSelectFont (myContext, "Helvetica-Bold", h/10, kCGEncodingMacRoman); 
CGContextSetCharacterSpacing (myContext, 10); 
CGContextSetTextDrawingMode (myContext, kCGTextFillStroke); 

CGContextSetRGBFillColor (myContext, 0, 1, 0, .5); 
CGContextSetRGBStrokeColor (myContext, 0, 0, 1, 1); 
myTextTransform = CGAffineTransformMakeRotation(0); 
CGContextSetTextMatrix (myContext, myTextTransform); 
CGContextShowTextAtPoint (myContext, 0, 50, "Quartz 2D", 9); 

से है, लेकिन इस कोड को पाठ स्क्रीन पर तैयार संशोधित कर रहा है नहीं मैं जोड़ा छवि?


  • दूसरा समस्या का एक हिस्सा

इस क्वार्ट्ज 2 डी प्रोग्रामिंग गाइड से भी है:

... एक को बदलने कि करने के लिए मूल तब्दील लागू पीडीएफ संदर्भ के ऊपरी-बाएं कोने और -1 द्वारा y-coordinate स्केल करता है।

वाई-समन्वय को अस्वीकार करने के लिए स्केलिंग ट्रांसफॉर्म का उपयोग क्वार्ट्ज ड्राइंग में कुछ सम्मेलनों को बदल देता है। उदाहरण के लिए, यदि आप CGContextDrawImage को संदर्भ में एक छवि खींचने के लिए कहते हैं, तो छवि गंतव्य में खींचे जाने पर परिवर्तन द्वारा संशोधित है। ...

मैं पहले से ही यह -1 कर रहा हूं लेकिन छवि पर कोई प्रभाव नहीं है और यह -1 चीज अभी भी मुझे स्पष्ट नहीं है।

मैंने इस दस्तावेज़ को कई बार पढ़ा है, Google पर खोज करने की कोशिश की लेकिन कोई उपयोगी ट्यूटोरियल नहीं है और कोई नवीनतम पुस्तकें केवल 2004, 2005, 2006 में लिखी पुस्तकें उपलब्ध नहीं हैं। क्या कोई इस बारे में मदद कर सकता है या मुझे उपयोगी संसाधनों का संदर्भ दे सकता है गहराई में यह सीखो।

जवाब के लिए सख्त प्रतीक्षा, वास्तव में मदद की ज़रूरत है। धन्यवाद।

उत्तर

3

इस गाइड पढ़ें और मुझे आशा है कि आपके सभी समस्याओं स्पष्ट हो जाएगा

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaDrawingGuide/Transforms/Transforms.html

+0

ठीक वही है जो मैं चाहता हूं कि यह मेरी अवधारणाओं को मंजूरी दे। बहुत बहुत धन्यवाद। – Pamy

0

क्या आप UIImageView उपclass का उपयोग कर रहे हैं और drawRect ओवरराइड कर रहे हैं? यह समर्थित नहीं है (दस्तावेज़ देखें) और शायद आपकी छवि किसी भी परिवर्तन से अप्रभावित क्यों है।

आप परिवर्तनों और bespoke ड्राइंग कोड तो आप एक UIView उपवर्ग का उपयोग करना चाहिए और()

अपनी छवि को मैन्युअल CGContextDrawImage का उपयोग कर किसी भी रूपांतरण को बदलने के बाद किया आपरेशनों ड्राइंग पर लागू होते हैं ड्राइंग का एक बहुत क्या करना चाहते हैं। आपको दस्तावेज़ों में कोड नमूने दिखाई देंगे जहां ग्राफिक्स स्थिति सहेजी गई है, एक ट्रांसफॉर्म लागू किया गया है, कुछ ड्राइंग किया गया है, और फिर संदर्भ बहाल किया गया है। इस तरह आप कुछ घटकों को घूर्णन करते हैं और कुछ नहीं।

उम्मीद है कि एक बार जब आप सीजी कोड के माध्यम से अपनी छवि खींच रहे हों और छवि दृश्य के माध्यम से नहीं, तो आपके प्रश्न का दूसरा भाग स्पष्ट हो जाएगा।

+0

मैं UIView उपवर्ग का उपयोग कर रहा है और इसके drawRect में मैं सभी कोड लिख रहा हूँ। सिर्फ निर्देशांक और परिवर्तन के स्पष्ट रूप से व्यवहार देखना चाहते हैं कि मैं नीचे बाईं ओर निर्देशित दो पंक्तियों को चित्रित क्यों करता हूं जो क्वार्ट्ज 2 डी डिफ़ॉल्ट है। Xib फ़ाइल में मैंने उस छवि को uiimage में रखा है। मैं इस दृश्य को उपclass के साथ uiimage में संशोधित नहीं करता जिसमें मैं सभी कोड कर रहा हूं, इसलिए पूरा दृश्य draw2d वर्ग का उप-वर्ग है जिसे मैंने बनाया है। जवाब के लिए धन्यवाद। – Pamy

+0

"xib फ़ाइल में मैंने छवि को UIImage में रखा" का क्या मतलब है? मैंने पढ़ा है कि आप uiimageview बनाते समय सवाल करते हैं, क्योंकि आप xib फ़ाइल में UIImage नहीं बना सकते हैं। मुझे समझ में नहीं आता कि आपने इसे कैसे सेट अप किया है, क्या आप अपने प्रश्न में कुछ स्क्रीनशॉट डाल सकते हैं? – jrturton

+0

मैंने uiimageview को ड्रैग किया और गिरा दिया और उसमें मैंने समन्वय छवि सेट की और ऐसा करने के बाद और कुछ भी नहीं किया, ट्रांसफॉर्म कोड लिखने के बाद मैं उम्मीद कर रहा था कि छवि भी घुमाएगी और मैं स्पष्ट रूप से देख रहा हूं कि निर्देशांक कहां हैं अब हैं, इसलिए मैं कोड को आसानी से समझ सकता हूं। – Pamy

संबंधित मुद्दे