2010-04-29 13 views
7

स्क्रीन अभिविन्यास परिदृश्य से चित्र में बदलते समय, या इसके विपरीत घुमावदार एनीमेशन को कैसे बदल या अक्षम कर सकता है?अभिविन्यास बदलते समय आईफोन घूर्णन एनीमेशन को बदलें या अक्षम करें

उत्तर

8

यदि आप नहीं चाहते हैं कि आपके व्यू कंट्रोलर घूमने के लिए चाहिए, तो आप जिस भी अभिविन्यास को समर्थन देना नहीं चाहते हैं, उसके लिए झूठी वापसी के लिए चाहिए .AutoRotateToInterface View नियंत्रक विधि को ओवरराइड करें ... Here is a reference

मामले कि यू सिर्फ रोटेशन किसी अन्य तरीके से हैंडल करना चाहते हैं में, आप तो

NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self 
     selector:@selector(handleOrientationDidChange:) 
      name:UIDeviceOrientationDidChangeNotification 
     object:nil]; 

तरह उपरोक्त विधियों में झूठी लौट सकते हैं और UIDeviceOrientationDidChangeNotification के लिए रजिस्टर अब यू जो कुछ भी आप कर सकते हैं जब यू सूचनाएं प्राप्त कर इसके साथ चाहते हैं ...

+2

मुझे लगता है कि वह अभी भी घूमना चाहता है लेकिन एक अलग एनीमेशन का उपयोग करने या बिल्कुल एनिमेट नहीं करने के लिए। –

+0

ने – Daniel

+0

को ट्रैक करने के लिए उत्तर बदल दिया है कि चाल है। –

16

हां, एनीमेशन को अक्षम करना संभव है, सब कुछ तोड़ने के बिना। अपने UIViewController में

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
    [UIView setAnimationsEnabled:YES]; 
} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    [UIView setAnimationsEnabled:NO]; 
    /* Your original orientation booleans*/ 
} 

प्लेस यह और सब कुछ ठीक किया जाना चाहिए:

निम्नलिखित कोड "ब्लैक बॉक्स" रोटेशन एनीमेशन को निष्क्रिय कर देगा, अन्य एनिमेशन या उन्मुखीकरण कोड के साथ खिलवाड़ के बिना। आईओएस में किसी भी अवांछित एनीमेशन पर एक ही विधि लागू की जा सकती है।

आपकी परियोजना के साथ शुभकामनाएं।

+8

आईओएस 6+ (और पिछली) संगतता के लिए, आप [UIView setAnimationsEnabled: NO] को willRotateToInterfaceOrientation में डाल सकते हैं: अवधि: बजाय ऑटोरोटेट टॉइंटरफेसऑरिएंटेशन: –

+4

यदि आप इन ओवरराइड करते हैं तो सुपर कार्यान्वयन को कॉल करना याद रखें। विशेष रूप से, सेब डॉक्स का कहना है कि यदि आप ओवरराइड कर रहे हैं तोRotateToInterfaceOrientation: अवधि: या didRotateFromInterfaceOrientation: "इस विधि के आपके कार्यान्वयन को इसके निष्पादन के दौरान किसी बिंदु पर सुपर कॉल करना होगा।" – levigroker

+0

यहां स्विफ्ट संस्करण है ... http://stackoverflow.com/a/6292506/294884 – Fattie

0

उपरोक्त @Nils मंच द्वारा उत्तर < आईओएस 7 के लिए मिलता है। आईओएस 7 या बाद में आप इसका उपयोग कर सकते हैं:

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [UIView setAnimationsEnabled:NO]; 

    [coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) { 
     [UIView setAnimationsEnabled:YES]; 
    }]; 

    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; 
} 
+0

वास्तव में ??? डॉक्स 8+ के बारे में क्यों बात करते हैं? –

+0

वह ब्लॉक कभी मेरे लिए नहीं बुलाया जाता है ..... – Kevin

+0

आईओएस 8.4 चलाकर डीबगर में बस पुनः लोड किया गया और जब मैं डिवाइस को घुमाता हूं तो इसे निश्चित रूप से बुलाया जा रहा है। PKCLsoft

संबंधित मुद्दे