2010-12-14 10 views
12

से 'स्केल' प्राप्त करना मैं एक आईपैड ऐप बना रहा हूं और उपयोगकर्ता को दृश्य के वर्तमान आकार के साथ अपडेट करना चाहता हूं। मैं CGAffineTransform के पैमाने की गणना करके और चौड़ाई (संबंधित दृश्य के) और xScale ऊंचाई से xScale गुणा करके ऐसा कर रहा था। मैं यह करना जारी रखना चाहता हूं, लेकिन अब मैं 2 डी ट्रांसफॉर्मेशन नहीं कर रहा हूं, और मुझे यकीन है कि CATransform3D से स्केल जानकारी निकालने के लिए किस समीकरण का उपयोग करना है।एक CATransform3D

क्या आप मदद कर सकते हैं?

उत्तर

19

परत की वर्तमान पैमाने प्राप्त करने के लिए आप सिर्फ परत पर एक valueForKeyPath: करते हैं:

CGFloat currentScale = [[layer valueForKeyPath: @"transform.scale"] floatValue]; 

अन्य कुंजी Apples Core Animation Programming Guide

+0

में पाया जा सकता यह महान काम किया! अनुमोदित उत्तर होना चाहिए। – Collin

+0

बहुत उपयोगी :) बहुत कुछ! – TonyMkenu

+0

मजेदार, हमेशा शून्य [[स्वयं प्रस्तुति लेयर] मान देता हैफोरकी: @ "transform.scale"] – Andy

8

मैं एपीआई से परिचित नहीं हूं लेकिन CATransform3D 3 डी ट्रांसफॉर्मेशन करने के लिए नियमित 4x4 रूपांतरण मैट्रिक्स की तरह दिखता है।

यह मानते हुए कि यह स्केल, रोटेशन और अनुवाद के संयोजन से अधिक कुछ भी नहीं दर्शाता है, CATransform3D पंक्ति या स्तंभ प्रमुख के आधार पर ऊपरी बाएं 3x3 की पंक्तियों या स्तंभों की परिमाण की गणना करके स्केल कारकों को निकाला जा सकता है क्रमशः।

उदाहरण के लिए, यदि यह पंक्ति-प्रमुख है, तो x-direction में स्केल (m11 * m11) + (m12 * m12) + (m13 * m13) का वर्ग रूट है (m13 * m13)। वाई और जेड स्केल समान रूप से दूसरी और तीसरी पंक्तियों की परिमाण होगी।

CATransform3DMakeTranslation के लिए प्रलेखन से यह प्रतीत होता है कि CATransform3D वास्तव में पंक्ति-प्रमुख है।

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