2015-02-28 5 views
60

बदलने के लिए मैं कोको नियंत्रण जो इस विधि का उपयोग"interfaceOrientation" iOS 8, में हटा दिया गया है इस विधि उद्देश्य सी

- (AVCaptureVideoOrientation)orientationForConnection 
{ 
    AVCaptureVideoOrientation videoOrientation = AVCaptureVideoOrientationPortrait; 
    switch (self.interfaceOrientation) { 
     case UIInterfaceOrientationLandscapeLeft: 
      videoOrientation = AVCaptureVideoOrientationLandscapeLeft; 
      break; 
     case UIInterfaceOrientationLandscapeRight: 
      videoOrientation = AVCaptureVideoOrientationLandscapeRight; 
      break; 
     case UIInterfaceOrientationPortraitUpsideDown: 
      videoOrientation = AVCaptureVideoOrientationPortraitUpsideDown; 
      break; 
     default: 
      videoOrientation = AVCaptureVideoOrientationPortrait; 
      break; 
    } 
    return videoOrientation; 
} 

समस्या "interfaceOrientation" iOS 8 लेकिन में पदावनत है से एक simpleCamera दृश्य डाउनलोड किया है मैं नहीं जानता कि स्विच स्थिति में इसे कैसे और कैसे बदला जाए।

+0

@cetcet से उत्तर को सही के रूप में चिह्नित न करें जब तक कि आपको या तो बेहतर तरीका न मिले या पाया कि यह सही नहीं है - मेरे लिए, ऐसा लगता है। –

+0

http://stackoverflow.com/a/3897243/194544 – beryllium

उत्तर

131

डिवाइस अभिविन्यास प्राप्त करना सही नहीं है। उदाहरण के लिए, डिवाइस लैंडस्केप मोड में हो सकता है, लेकिन एक व्यू कंट्रोलर जो केवल पोर्ट्रेट का समर्थन करता है पोर्ट्रेट में ही रहेगा। इसलिए बहुत अपने कोड के छोटे बदलने की जरूरत

[[UIApplication sharedApplication] statusBarOrientation] 

एक और बोनस है कि यह अभी भी UIInterfaceOrientation enum का उपयोग करता है,:

इसके बजाय, इस का उपयोग करें।

+2

एक्सटेंशन में काम नहीं करता – jjxtra

+4

'स्टेटस बैरऑरिएंटेशन 'आईओएस 9 में बहिष्कृत - https://developer.apple.com/documentation/uikit/uiapplication/1623026-statusbarorientation?language = objc – Pang

2

UIDevice की -orientation संपत्ति का उपयोग करना सही नहीं है (भले ही यह ज्यादातर मामलों में काम कर सके) और कुछ बग का कारण बन सकता है, उदाहरण के लिए UIDeviceOrientation डिवाइस का अभिविन्यास भी ऊपर या नीचे होने पर विचार करें, वहां भी है उन मूल्यों के लिए UIInterfaceOrientation enum में कोई जोड़ी नहीं है।
इसके अलावा, यदि आप अपने ऐप को किसी विशेष अभिविन्यास में लॉक करते हैं, तो UIDevice आपको इसे ध्यान में रखे बिना डिवाइस अभिविन्यास देगा।
दूसरी ओर आईओएस 8 ने संपत्ति को UIViewController कक्षा पर बहिष्कृत कर दिया है। अगर वे ओवरराइड नहीं कर रहे हैं वे आपने वर्तमान इंटरफ़ेस उन्मुखीकरण को समझने के लिए एक तरह से दे सकता है

  • स्थिति पट्टी का उपयोग उन्मुखीकरण
  • उपयोग आकार कक्षाएं, iPhone पर:
    2 विकल्प इंटरफ़ेस उन्मुखीकरण पता लगाने के लिए उपलब्ध हैं

क्या अभी भी याद आ रही है इंटरफ़ेस उन्मुखीकरण का एक परिवर्तन की दिशा को समझने के लिए एक तरीका है, कि एनिमेशन के दौरान बहुत महत्वपूर्ण है।
डब्ल्यूडब्ल्यूडीसी 2014 के सत्र में "आईओएस 8 में नियंत्रक प्रगति देखें" स्पीकर उस समस्या का समाधान भी प्रदान करता है, जो -will/DidRotateToInterfaceOrientation को प्रतिस्थापित करता है।

यहाँ प्रस्तावित समाधान आंशिक रूप से लागू:

-(void) viewWillTransitionToSize:(CGSize)s withTransitionCoordinator:(UIVCTC)t { 
    orientation = [self orientationFromTransform: [t targetTransform]]; 
    oldOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    [self myWillRotateToInterfaceOrientation:orientation duration: duration]; 
    [t animateAlongsideTransition:^(id <UIVCTCContext>) { 
     [self myWillAnimateRotationToInterfaceOrientation:orientation 
                duration:duration]; 
     } 
     completion: ^(id <UIVCTCContext>) { 
     [self myDidAnimateFromInterfaceOrientation:oldOrientation]; 
     }]; 
} 
+0

अभिविन्यासप्रोमट्रांसफॉर्म कैसे करता है: विधि परिवर्तन से उन्मुखीकरण प्राप्त करती है? – Chandra

+1

@ चंद्रा यहां जांचें http://blog.inferis.org/blog/2015/04/27/ios8-and-interfaceorientation/ – Andrea

18

iOS8 के बाद से, एप्पल interfaceOrientation के बजाय TraitCollections (आकार वर्ग) का उपयोग करने की सिफारिश की गई।

इसके अलावा, आईओएस 9 और नए आईपैड फीचर "मल्टीटास्किंग" के बाद, कुछ ऐसे मामले हैं जहां डिवाइस अभिविन्यास विंडो अनुपात के साथ फिट नहीं होता है! (अपने एप्लिकेशन यूआई को तोड़ना)

इसलिए नियमित आकार कक्षाओं का उपयोग करते समय भी आपको बहुत सावधान रहना चाहिए क्योंकि यह पूरे आईपैड स्क्रीन को जरूरी नहीं लेना चाहिए।

कभी-कभी TraitCollections आपकी सभी डिज़ाइन आवश्यकताओं को पूरा नहीं करता है। उन मामलों के लिए, एप्पल को देखने के परिबंधों तुलना करने के लिए सिफारिश की गई है:

if view.bounds.size.width > view.bounds.size.height { 
    // ... 
} 

मैं काफी हैरान था, लेकिन आप 21'15 पर WWDC 2015 वीडियो Getting Started with Multitasking on iPad in iOS 9 पर देख सकते हैं।

शायद आप वास्तव में डिवाइस अभिविन्यास की तलाश में हैं, न कि स्क्रीन या विंडो अनुपात के लिए। यदि आप डिवाइस कैमरे की परवाह करते हैं, तो आपको TraitCollection का उपयोग नहीं करना चाहिए, न ही सीमाएं देखें।

+0

वास्तव में इसका उल्लेख है। धन्यवाद!! –

+0

क्या यह जानने का कोई अनुशंसित तरीका है कि डिवाइस परिदृश्य बाएं या दाएं है या नहीं? यह वास्तव में आईफोन एक्स के नोट के साथ मायने रखता है :( –

+0

ठीक है, आप वास्तविक उपकरण अभिविन्यास की जांच करना चाहते हैं, तो आप '[[UIDevice currentDevice] ओरिएंटेशन] का उपयोग कर सकते हैं, लेकिन आपको इसका उपयोग आईफोन एक्स अनुकूलन के लिए नहीं करना चाहिए। कृपया नए आईओएस का उपयोग करें 11 सुरक्षित क्षेत्र या पुराना लेआउट मार्जिन। – vmeyer

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