2011-10-07 13 views
6

पर एक UIView घुमाएं मैं 360 डिग्री के लिए अपने क्षैतिज अक्ष पर एक UIView घुमाने और फिर दृश्य में सामग्री को रीफ्रेश करना चाहता था। मैं इस पर समाधान के लिए देख रहा था। यहां एक जोड़े को मिला। यही वह है जो मैं बाहर आया था।अपने एक्स-अक्ष (क्षैतिज धुरी)

[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
     self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); 
    } completion:^(BOOL finished){ 
     NSLog(@"Finished first pi"); 
     [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
      self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); 
     } completion:^(BOOL finished) { 
      NSLog(@"Finished second pi"); 

     }];   

    }]; 

यह दृश्य को फ़्लिप करता है लेकिन केवल 180 डिग्री तक। मैं इसे एक और बार फ्लिप करना चाहता हूं ताकि मैं सामान्य रूप से दृश्य देख सकूं ..

मेरे एनएसएलॉग दोनों एक के बाद एक प्रदर्शित होते हैं। मुझे यकीन है कि मैं यहाँ कुछ याद कर रहा हूँ। किसी भी मदद के लिए मददगार होगा ..

धन्यवाद

उत्तर

8

आपके समापन ब्लॉक में वर्तमान परिवर्तन के साथ नए ट्रांसफॉर्म को संयोजित करने का प्रयास करें।

self.tableView.layer.transform = CATransform3DConcat(self.tableView.layer.transform, CATransform3DMakeRotation(M_PI,1.0,0.0,0.0)); 
+1

आप 'सीधे इस मामले में, आप बस' UIView' पर 'transform', सेट कर सकते हैं CALayer' हालांकि यह है पर' transform' निर्धारित करने की आवश्यकता नहीं है: यहाँ स्विफ्ट में एक उदाहरण है एक अलग 'संरचना' प्रकार - एक 'CGAffineTransform'। –

+0

यह सही है। मैं बस दिए गए उदाहरण से बाहर जाना चाहता था। मैं हमेशा UIView पर परिवर्तन का उपयोग करता हूं। – jaminguy

1

आप इस सवाल का जवाब How to make a CATransform3dMakeRotation rotate the other way? And chain together

मुझे लगता है कि आपकी समस्या से संबंधित है की जाँच करनी चाहिए: "सीधे बदलने आप एक साथ काम कर रहे हैं, कोर एनिमेशन को जोड़ होगा वर्तमान मान से निर्दिष्ट परिवर्तन में परिवर्तित करें। इसे उस परिवर्तन को पाने के लिए सबसे छोटा रास्ता मिलेगा, जो एनीमेशन दिशा को प्रतिबंधित करेगा। यदि आप एक ही ट्रांसफॉर्म संपत्ति को दो बार एनिमेट करने का प्रयास करते हैं, तो दूसरा मान केवल पहले ओवरराइड करेगा, न कि एक साथ दो परिवर्तनों को गठबंधन करें। "

1

उपयोग इस: -

rotatingView.layer.anchorPoint = CGPointMake(0.0f, 0.0f); 
    rotatingView.center = CGPointMake(0, 
             (rotatingView.center.y - 
             (rotatingView.bounds.size.height/2.0f))); 
    rotatingView.center = CGPointMake(0, 
             (rotatingView.center.y- 
             (rotatingView.bounds.size.height/2))); 

// start the Page Open 
[UIView beginAnimations:@"Animation" context:nil]; 
[UIView setAnimationDuration:13.0]; 
// set angle as per requirement 
[rotatingView.layer setValue:[NSNumber numberWithInt:280] 
        forKeyPath:@"transform.rotation.x"]; 

[UIView commitAnimations]; 
0

तुम बस पूरा होने के ब्लॉक के अंदर 0.0 करने के लिए 1.0 से अपने कोड बदलने के लिए और वूहू सब किया।

[UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
      self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,1.0,0.0,0.0); 
     } completion:^(BOOL finished){ 
      NSLog(@"Finished first pi"); 
      [UIView animateWithDuration:1 delay:0 options:UIViewAnimationOptionTransitionNone animations:^{ 
       self.tableView.layer.transform = CATransform3DMakeRotation(M_PI,0.0,0.0,0.0); 
      } completion:^(BOOL finished) { 
       NSLog(@"Finished second pi"); 

      }];   

     }]; 
0

इस .Repeat और .Autoreverse एनीमेशन विकल्प + सेटिंग एनीमेशन की बारंबार गिनती का उपयोग कर संपर्क कर सकते हैं।

UIView.animateWithDuration(time, delay: 0, options: [.Repeat, .Autoreverse], animations: { 
     UIView.setAnimationRepeatCount(3) 
     self.view.layer.transform = CATransform3DMakeRotation(CGFloat(M_PI), 1, 0, 0) 
    }) { (completed) in 
     // completion 
    } 
संबंधित मुद्दे