2009-02-05 21 views
16

मैं इतना आसान कोड की तरह कुछ (स्यूडोकोड में) हो जाता है, इसके केंद्र के आसपास कुछ UIView को घुमाने के लिए कोशिश कर रहा हूँ बारी बारी से M_PI/2 कहें कि चीज अच्छी तरह से घूमती है। अगर मैं इसे 2 * एमएफआई पर सेट करता हूं, तो यह "कुछ नहीं" करता है। मैं समझ सकता हूं कि मैट्रिक्स कुछ ऐसा करता है जो कुछ भी नहीं करता है (घूर्णन 360 का अर्थ है "रहने" का मतलब है), अभी तक, मैं इसे 5 बार घुमाने के लिए चाहता हूं (एक समाचार पत्र घुमावदार पैमाने पर आपके प्रभाव पर आ रहा है - मैं हूं वर्णन करने में बहुत अच्छा नहीं है, उम्मीद है कि कोई समझता है)। तो, मैंने सेटिंग कोण को 180 डिग्री (एमएफआई) में जोड़ने की कोशिश की और एक नेस्टेड animatationBlock जोड़ें। लेकिन मुझे लगता है कि चूंकि मैं एक ही संपत्ति (someview.transition) सेट कर रहा हूं, फिर भी यह किसी भी तरह से इसे अनदेखा करता है)। मैंने कोण एमएफआई के साथ एनीमेशन की दोहराव गिनती सेट करने की कोशिश की लेकिन ऐसा लगता है कि यह 180 को घुमाता है, सीधे स्थिति पर वापस जा रहा है और फिर फिर घुमाएगा।अपने केंद्र के चारों ओर एक UIView लेकिन कई बार

तो, मैं विचारों से थोड़ा दूर हूं, किसी भी मदद की सराहना की! --t

+0

आप भी यहाँ से शुरू कर सकते हैं: को लागू करने और परिवर्तन करने के लिए https://github.com/jonasschnelli/UIView-i7Rotate360 बहुत आसान। –

+0

[UIView अनंत 360 डिग्री रोटेशन एनीमेशन?] के संभावित डुप्लिकेट? (Http://stackoverflow.com/questions/9844925/uiview-infinite-360-degree-rotation-animation) –

उत्तर

36

आप अपनी UIView की परत संपत्ति पर निम्न एनीमेशन का उपयोग कर सकते हैं। मैंने इसका परीक्षण किया है।

UIView *viewToSpin = ...;  
CABasicAnimation* spinAnimation = [CABasicAnimation 
            animationWithKeyPath:@"transform.rotation"]; 
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI]; 
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"]; 
+0

मैं इस एनीमेशन को कैसे धीमा कर सकता हूं? – mahboudz

+0

एनीमेशन समय विचारों के लिए, कृपया CAMediaTiming प्रोटोकॉल के लिए संदर्भ सामग्री देखें, जो CABasicAnimation लागू करता है। विशेष रूप से, आप शायद 'अवधि' संपत्ति सेट करना चाहते हैं। उपरोक्त कोड 0.25 सेकंड की डिफ़ॉल्ट अवधि का उपयोग कर रहा है। –

1

एक सतत कताई प्रभाव हो रही है एक छोटे से मुश्किल है, लेकिन मैं इसे here करने के लिए एक साधन का वर्णन। हां, कोर एनीमेशन यूनिट सर्कल के भीतर निकटतम समापन स्थिति में परिवर्तन को अनुकूलित करने के लिए प्रतीत होता है। जिस विधि का मैं वर्णन करता हूं वह पूर्ण घूर्णन करने के लिए एक साथ कुछ आधे-रोटेशन एनिमेशन को चेन करता है, हालांकि आप एक एनीमेशन से अगले एनीमेशन में हैंडऑफ में थोड़ी सी स्टटर देखते हैं।

शायद इन अर्ध-रोटेशन मानों के साथ निर्मित एक CAKeyframe एनीमेशन जाने का सही तरीका होगा। फिर आप त्वरण और मंदी को नियंत्रित भी कर सकते हैं।

6

जैसा कि ब्रैड लार्सन ने इंगित किया है, आप इसे CAKeyframeAnimation के साथ कर सकते हैं। उदाहरण के लिए,

CAKeyframeAnimation *rotationAnimation; 
rotationAnimation = 
    [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"]; 

rotationAnimation.values = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0 * M_PI], 
          [NSNumber numberWithFloat:0.75 * M_PI], 
          [NSNumber numberWithFloat:1.5 * M_PI], 
          [NSNumber numberWithFloat:2.0 * M_PI], nil]; 
rotationAnimation.calculationMode = kCAAnimationPaced; 
rotationAnimation.removedOnCompletion = NO; 
rotationAnimation.fillMode = kCAFillModeForwards; 
rotationAnimation.timingFunction = 
    [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
rotationAnimation.duration = 10.0; 

CALayer *layer = [viewToSpin layer]; 
[layer addAnimation:rotationAnimation forKey:@"rotationAnimation"]; 

आप rotationAnimation.timingFunction संपत्ति के साथ rotationAnimation.duration संपत्ति के साथ कुल एनीमेशन की अवधि, और त्वरण और मंदी (और बीच में कदम की गणना) नियंत्रित कर सकते हैं।

1
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
animation.fromValue = [NSNumber numberWithFloat:0.0f]; 
animation.toValue = [NSNumber numberWithFloat: 2*M_PI]; 
animation.duration = 8.0f; 
animation.repeatCount = INFINITY; 
[self.myView.layer addAnimation:animation forKey:@"SpinAnimation"]; 
संबंधित मुद्दे