2009-05-08 8 views
10

डिफ़ॉल्ट रूप से, एक UIImageView केवल इसके केंद्र के बारे में घूमता है। मैं इसे छवि में किसी भी अन्य बिंदु के बारे में घूमने के लिए कैसे प्राप्त करूं?मैं किसी भी बिंदु (इसके केंद्र के अलावा) के संबंध में UIImageView को कैसे घुमा सकता हूं?

उत्तर

18

ऐसा करने का एक तरीका UIImageView की अंतर्निहित परत के एंकरपॉइंट को बदलकर और इसके बारे में घूर्णन करना है। आप रोटेशन के बिंदु निम्नलिखित की तरह कुछ का उपयोग कर बदल सकते हैं:

imageView.layer.anchorPoint = CGPointMake(0.25, 0.25); 

anchorPoint परत के भीतर रिश्तेदार निर्देशांक के संदर्भ में परिभाषित किया गया है। यही है, (0,0) परत के ऊपरी-बाएं (आईफोन पर, जहां UIView परतों ने वाई निर्देशांक फ़्लिप किया है) और (1,1) निचला दायां है।

एंकरपॉइंट को स्थानांतरित करने से आपकी छवि बढ़ सकती है, इसलिए आपको बाद में अपनी स्थिति समायोजित करने की आवश्यकता हो सकती है।

कि नए लंगर बिंदु के बारे में छवि की परत घुमाने के लिए, आप निम्नलिखित की तरह कुछ का उपयोग कर परत के लिए CATransform3D struct बदल सकते हैं:

CATransform3D rotatedTransform = imageView.layer.transform; 
rotatedTransform = CATransform3DRotate(rotatedTransform, 60.0 * M_PI/180.0, 0.0f, 0.0f, 1.0f); 
imageView.layer.transform = rotatedTransform; 

यह उदाहरण करता है लंगर बिंदु के बारे में 60 डिग्री के एक वृद्धिशील रोटेशन ।

किसी परत में सभी परिवर्तन डिफ़ॉल्ट रूप से एनिमेटेड होते हैं।

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];  

// Code for changes here 

[CATransaction commit]; 
+2

बस मेरे भविष्य खुद के लिए यहाँ कुछ नोट जोड़कर: '#import #import 'और आपको 'क्वार्ट्जकोर' ढांचे को आयात करने की भी आवश्यकता है। धन्यवाद। –

+0

लेकिन यह आपके द्वारा छवि के अनुसार चलता है। क्या एंकर पॉइंट को ले जाना संभव है? – hfossli

+0

@Fossli - नहीं, एक परत की स्थिति अपने एंकर बिंदु से बंधी है। हालांकि, यह पता लगाना अपेक्षाकृत आसान है कि परत के लिए नई स्थिति क्या होनी चाहिए, और एक गैर-एनिमेटेड लेनदेन में परत के एंकर पॉइंट और स्थिति दोनों को बदलने के लिए। –