2012-07-31 23 views
8

चला जाता है, मैं इन निष्कर्ष:CGAffineTransform रोटेशन मेरे प्रयोग में गलत तरीके से

YourView.transform = CGAffineTransformMakeRotation(positive value); 

दृश्य को घड़ी की बारी बारी से होगा, और

YourView.transform = CGAffineTransformMakeRotation(Negative value); 

वामावर्त दृश्य को घुमा देगी

लेकिन दस्तावेज़ कहता है:

कोण, रेडियंस में, जिसके द्वारा एफ़िन ट्रांसफॉर्म को घुमाने के लिए rm। आईओएस में, एक सकारात्मक मान काउंटरक्लॉक रोटेशन निर्दिष्ट करता है और ऋणात्मक मान दक्षिणावर्त रोटेशन निर्दिष्ट करता है।

क्या वे एक दूसरे के साथ विरोधाभास करते हैं?

+0

आईव ने अभी इसका परीक्षण किया और मुझे एक ही परिणाम मिलते हैं। दस्तावेज़ निर्दिष्ट करते हैं कि ओएसएक्स में यह व्यवहार है। लेकिन आपके जैसे आईओएस में नहीं, बहुत अजीब है। – Pochi

+0

क्या आपका 'मूल्य' π/2 होना चाहिए? –

+0

@ibeitia: हाँ, मैंने π/2 और -π/2 – romox

उत्तर

23

आपका भ्रम काफी समझ में आता है।

सच में, एक सकारात्मक कोण सकारात्मक एक्स धुरी से सकारात्मक एक्स धुरी की ओर घूर्णन का प्रतिनिधित्व करता है। एक नकारात्मक कोण सकारात्मक एक्स धुरी से नकारात्मक वाई धुरी की तरफ घूर्णन का प्रतिनिधित्व करता है।

"मूल" कोर ग्राफिक्स समन्वय प्रणाली मानक Cartesian coordinate system के बाद मॉडलिंग की जाती है, जिसमें वाई धुरी पृष्ठ पर ऊपर बढ़ जाती है। इस प्रणाली में, एक सकारात्मक कोण एक वामावर्त रोटेशन का प्रतिनिधित्व करता है:

normal coordinate system

तो अगर आप बनाने के अपने खुद के CGContext (उदाहरण के लिए, CGBitmapContextCreate या CGPDFContextCreate का उपयोग करके), रोटेशन के रूप में आप उम्मीद कर काम करेंगे।

हालांकि, कंप्यूटर सिस्टम ने ऐतिहासिक रूप से एक समन्वय प्रणाली का उपयोग किया है जिसमें वाई धुरी पृष्ठ पर नीचे बढ़ जाती है। इस तरह की एक फ़्लिप समन्वय प्रणाली में, एक सकारात्मक कोण एक घड़ी की रोटेशन का प्रतिनिधित्व करता है:

flipped coordinate system

सूचना है कि दोनों का समन्वय प्रणाली में, एक सकारात्मक कोण सकारात्मक Y अक्ष के प्रति सकारात्मक एक्स अक्ष से घूमता है।

यह पता चला है कि UIKit ग्राफिक्स संदर्भों की समन्वय प्रणाली को फ़्लिप करता है जो यह आपके लिए बनाता है। इसमें drawRect: भेजने से पहले ग्राफिक्स संदर्भ स्थापित होता है और ग्राफिक्स संदर्भ यह UIGraphicsBeginImageContext में स्थापित होता है। (Quartz 2D Programming Guide यह बताता है।) आप वर्तमान ट्रांसफॉर्म मैट्रिक्स (CGContextGetCTM का उपयोग करके) देख कर इसे देख सकते हैं। आप पाएंगे कि इसमें -1 है d तत्व में, जिसका अर्थ है कि वाई धुरी फ़्लिप हो गई है।

एक UIView भी अपने subviews, जो UIViewtransform संपत्ति के अर्थ को प्रभावित करता है बिछाने के लिए एक फ़्लिप समन्वय प्रणाली का उपयोग करता है।

+0

thx बहुत कोशिश की, इसकी सराहना करें! – romox

+1

लेकिन इस तरह एक फ्लिप समन्वय प्रणाली में, एक सकारात्मक कोण घड़ी के घूर्णन का प्रतिनिधित्व करता है, लेकिन दस्तावेज़ कहते हैं, "आईओएस में, एक सकारात्मक मूल्य घुमावदार घुमाव को निर्दिष्ट करता है।" तो मुझे लगता है कि यह अभी भी विरोधाभासी है। क्या दस्तावेज़ गलत है? – romox

+0

कभी-कभी गलत होता है। यह उस संदर्भ पर निर्भर करता है जिसमें आप परिवर्तन का उपयोग करते हैं। –