2012-03-10 11 views
10

मैं ऊपरी बाएं कोने में एक छवि के साथ एक परत घुमाएगा, न कि केंद्र। दस्तावेज़ों के अनुसार मैंने anchorPoint संपत्ति को [0, 1] पर सेट किया है। दृश्य मेरे उदाहरण में 50 डिग्री से घूमता है, लेकिन इससे पहले कि यह एनिमेट हो जाए, दृश्य स्क्रीन पर किसी अन्य बिंदु पर कूदता है।एक परत के बिना एक विशिष्ट एंकर बिंदु पर एक परत घुमाने के लिए कैसे?

self.shakeTag.layer.anchorPoint = CGPointMake(0.0f, 1.0f); 
[UIView beginAnimations:@"rotate" context:nil]; 
[self.shakeTag.layer setTransform: 
    CATransform3DRotate(CATransform3DIdentity, 
    radians(50.0), 0.0f, 0.0f, 1.0f)]; 
[UIView commitAnimations]; 

radians() इस तरह परिभाषित किया गया है:

static inline double radians (double degrees) {return degrees * M_PI/180;} 

मैं एक छवि 4 बार आकार है और पारदर्शी पिक्सेल का एक बहुत है कि का उपयोग करते हैं, मैं इसे डिफ़ॉल्ट लंगर बिंदु [0.5 पर घुमा सकते हैं , 0.5], लेकिन मैं अदृश्य पिक्सेल के लिए जगह बर्बाद नहीं करना चाहता। किसी भी विचार से मैं रोटेशन होने से पहले परत को कूदने से कैसे रोक सकता हूं?

+0

अगर आपको लगता है जवाब सही है, यह होगा अगर आप स्वीकार करते हैं तो भयानक। – Krumelur

+0

आपको यहां मेरा जवाब देखने की आवश्यकता है: http://stackoverflow.com/a/22188420/550393 – 2cupsOfTech

उत्तर

20

एंकर पॉइंट बदलना आपके दृश्य की स्थिति को प्रभावित करता है। यदि आप एंकर पॉइंट बदलते हैं तो आपको दृश्य की स्थिति बदलनी होगी और यदि आप अपना विचार रखना चाहते हैं तो यह वर्तमान में कहां है। स्थिति परिवर्तन आपके लंगर बिंदु निर्धारित करने और क्षतिपूर्ति करने के लिए: कुछ इस तरह (Layer Position jumps at start of (Core) Animation यहाँ से लिया गया): का प्रयोग करें

-(void)setAnchorPoint:(CGPoint)anchorPoint forView:(UIView *)view 
{ 
    CGPoint newPoint = CGPointMake(view.bounds.size.width * anchorPoint.x, view.bounds.size.height * anchorPoint.y); 
    CGPoint oldPoint = CGPointMake(view.bounds.size.width * view.layer.anchorPoint.x, view.bounds.size.height * view.layer.anchorPoint.y); 

    newPoint = CGPointApplyAffineTransform(newPoint, view.transform); 
    oldPoint = CGPointApplyAffineTransform(oldPoint, view.transform); 

    CGPoint position = view.layer.position; 

    position.x -= oldPoint.x; 
    position.x += newPoint.x; 

    position.y -= oldPoint.y; 
    position.y += newPoint.y; 

    view.layer.position = position; 
    view.layer.anchorPoint = anchorPoint; 
} 

भी अधिक जानकारी के लिए यहाँ देखें: Changing my CALayer's anchorPoint moves the view