2012-03-08 26 views
9

मैं उद्देश्य-सी के लिए नया हूं और मैं स्क्रीन पर एक छवि जोड़ना चाहता हूं, इसे एएस 3 में ट्विन करना, इसे एक छोर से दूसरी स्क्रीन तक ले जाना चाहता हूं जबकि अपने केंद्र बिंदु के चारों ओर घूमते हुए।एनीमेट रोटेशन/स्केल/यूआईएममेज का अनुवाद एक ही समय में

मैं

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ 
      // TRANSFORM SCREENSHOT 
      screenShotView.transform = CGAffineTransformRotate(screenShotView.transform, -M_PI * 0.05); 
      screenShotView.transform = CGAffineTransformScale(screenShotView.transform, 0.6, 0.6); 
      screenShotView.transform = CGAffineTransformTranslate(screenShotView.transform, 
                    self.webView.frame.origin.x, 
                    self.webView.frame.origin.y - self.webView.frame.size.height * 0.3 
             ); 

साथ की कोशिश की लेकिन इस कोड के साथ छवि TransformIdentity के केंद्र के चारों ओर घूमता है। तो घूर्णन और घूर्णन को घुमाने के दौरान नियंत्रण से बाहर हो जाता है और छवि बिल्कुल उस स्थिति में नहीं होती है जिसे मैं पसंद करता था।

एक ही समय में घूर्णन और अनुवाद करने का सही तरीका क्या है, छवि के साथ घूर्णन केंद्र का अनुवाद?

और कम से कम परिवर्तन के बाद मैं छवि के दाएं कोने में एक करीबी बटन जोड़ना चाहता हूं। इसके लिए मुझे कोने के नए निर्देशांक भी चाहिए।

thnx!

+0

http://www.apeth.com/iOSBook/ch17.html इस बाहर की जाँच के लायक हो सकता है –

+0

यह मेरे लिए बहुत स्पष्ट नहीं है ... समस्या परिवर्तन है? या आप सिर्फ परिवर्तन के बाद दाएं कोने के निर्देशांक चाहते हैं? – Saphrosit

+0

क्षमा करें अगर मैं पर्याप्त स्पष्ट नहीं हूं। समस्या यह है कि रोटेशन छवि के केंद्र के आसपास नहीं है। घूर्णन केंद्र अनुवाद के साथ नहीं बढ़ता है ताकि छवि की अंतिम स्थिति इसके आयामों पर निर्भर करे। नतीजतन पूरी चीज आईपैड और आईफोन पर अलग दिखती है। – headkit

उत्तर

16

अब मैं निम्नलिखित कोड के साथ समाप्त हुआ, लेकिन मुझे अभी भी पता नहीं है कि यह कला समाधान की स्थिति है या नहीं।

CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25); 
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
transform = CGAffineTransformRotate(transform, degreesToRadians(-10)); 

[UIView beginAnimations:@"MoveAndRotateAnimation" context:nil]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationDuration:2.0]; 

    screenShotView.transform = transform; 

[UIView commitAnimations]; 
+0

आकर्षण की तरह काम किया! धन्यवाद – MasterRazer

7

आईओएस 7 ऐसा करने का पसंदीदा तरीका ब्लॉक ऑब्जेक्ट का उपयोग करेगा। एनिमेटिंग के 'पुराने' तरीके की तुलना में इसमें कई फायदे हैं। विशेष रूप से यह बहु-कोर और वीडियो सह-प्रसंस्करण का उपयोग कर सकता है। इसके अलावा 'बिल्ट-इन' कॉल बैक पार्ट (पूरा भाग) बहुत उपयोगी है, क्योंकि यह आवश्यकतानुसार आवश्यक वस्तुओं की जानकारी और ऑब्जेक्ट्स के लिंक रखता है।

CGAffineTransform translate = CGAffineTransformMakeTranslation(self.webView.frame.origin.x,self.webView.frame.origin.y - self.webView.frame.size.height * 0.25); 
CGAffineTransform scale = CGAffineTransformMakeScale(0.6, 0.6); 
CGAffineTransform transform = CGAffineTransformConcat(translate, scale); 
transform = CGAffineTransformRotate(transform, degreesToRadians(-10)); 

// animation using block code 
[UIView animateWithDuration:2.0 
         delay:0.0 
        options:UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
        screenShotView.transform = transform; 
       }completion:^(BOOL finished){ 
        // do something if needed 
       }];