यह संभव है CATransform3D
को CGAffineTransform
पर परिवर्तित करें, लेकिन आप कुछ क्षमताओं को खो देंगे। मुझे एक परत और उसके पूर्वजों के कुल परिवर्तन को CGAffineTransform
में परिवर्तित करने के लिए उपयोगी पाया गया ताकि मैं इसे कोर ग्राफिक्स के साथ प्रस्तुत कर सकूं। की कमी कर रहे हैं:
- आपका इनपुट XY विमान में के रूप में फ्लैट माना जाएगा
- आपका आउटपुट XY विमान भी
- परिप्रेक्ष्य/
.m34
से foreshortening neutralized हो जाएगा के रूप में फ्लैट माना जाएगा
कि अपने उद्देश्यों के लिए ठीक लगता है:
// m13, m23, m33, m43 are not important since the destination is a flat XY plane.
// m31, m32 are not important since they would multiply with z = 0.
// m34 is zeroed here, so that neutralizes foreshortening. We can't avoid that.
// m44 is implicitly 1 as CGAffineTransform's m33.
CATransform3D fullTransform = <your 3D transform>
CGAffineTransform affine = CGAffineTransformMake(fullTransform.m11, fullTransform.m12, fullTransform.m21, fullTransform.m22, fullTransform.m41, fullTransform.m42);
यो आप अपने सुपरलेयर से मिलकर पहले 3 डी ट्रांसफॉर्म में अपना पूरा काम करना चाहते हैं, और फिर अंततः CATransform3D
को CGAffineTransform
पर परिवर्तित करें। यह देखते हुए कि परतों को फ्लैट लक्ष्य पर शुरू करने और प्रस्तुत करने के लिए फ्लैट हैं, मुझे यह बहुत उपयुक्त लगता है क्योंकि मेरे 3 डी रोटेशन 2 डी शीर्स बन गए हैं। मुझे इसे फोरशॉर्टिंग बलिदान के लिए स्वीकार्य भी मिला। इसके आस-पास कोई रास्ता नहीं है क्योंकि एफ़िन ट्रांसफॉर्म को समांतर रेखाओं को संरक्षित करना होता है।
एक 3 डी-बदल परत का उपयोग मुख्य ग्राफ़िक्स, उदाहरण के लिए, आप रूपांतरण जोड़ सकता है रेंडर करने के लिए (! लंगर अंक का सम्मान), तो Affine में बदलने का है, और अंत: जिज्ञासा से बाहर
CGContextSaveGState(context);
CGContextConcatCTM(context, affine);
[layer renderInContext:context];
CGContextRestoreGState(context);
स्रोत
2013-08-26 15:32:08
, क्यों करेंगे यदि आप पहले से ही परिणाम प्राप्त कर रहे हैं तो क्या आप पहले से ही परिणाम प्राप्त कर रहे हैं, यदि आप एक दृश्य बनाम एक CGAffineTransform बनाम एक परत के लिए CATransform3D लागू कर रहे थे, तो आप परवाह है? –
क्योंकि self.layer.transform का प्रारंभिक मान self.transform से अलग है, है ना? – Abramodj
मैं मतलब, नाड़ी विधि में आने से पहले मैं देखने के लिए कुछ Affine परिवर्तनों को लागू करने, लेकिन मैं परत को स्पर्श नहीं करते, इसलिए मुझे लगता है कि बदलने पहचान मेरी जानकारी के लिए वहाँ – Abramodj