2011-06-14 15 views
12

मुझे पता है कि अनुमति देने के लिए/क्या आईफोन में इंटरफेस अभिविन्यास को बदलने के लिए मजबूर करने का कोई तरीका है?

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

का उपयोग कर फिर भी बारी बारी से करने उन्मुखीकरण नामंज़ूर, मैं अब समस्या है जहां फोन (या upsidedown) चित्र में हो सकता है और कुछ बिंदु पर मैं घुमाना चाहते स्क्रीन जैसे उपयोगकर्ता परिदृश्य में घुमाए गए हैं। इस बिंदु पर, मैं अब और काम करने के लिए autorotate नहीं चाहता। मैं परिदृश्य में रहने के लिए इंटरफेस अभिविन्यास को मजबूर करना चाहता हूं। क्या इसे करने का कोई तरीका है? मैं शायद ऑटोरोटेट को बंद करने के लिए एक हैक का पता लगा सकता हूं, लेकिन पहले स्थान पर रोटेशन को मजबूर कर रहा हूं, मुझे नहीं पता कि कैसे करना है।

यहाँ मैं क्या करने की कोशिश कर रहा हूँ है:

  • एप्लिकेशन को किसी भी और सभी झुकाव को घुमाता है। सब कुछ सामान्य है।

  • एक घटना होती है।

  • अब ऑटोरोटेट केवल परिदृश्य और भूस्खलन के लिए काम करता है। इसके अलावा, यदि उपयोगकर्ता पोर्ट्रेट या पोर्ट्रेटस्पेडडाउन में है, तो मैं उपयोगकर्ता को उस अभिविन्यास में लॉक करने के लिए प्रोग्रामेटिक रूप से लैंडस्केपराइट पर घुमाता हूं।

बस बातें जटिल बनाने के लिए, मैं एक UIAlertView (मुझे पता है कि कैसे करना है) के लिए मजबूर रोटेशन से पहले पॉप अप करने, दे उपयोगकर्ता पता क्या हो रहा है चाहता हूँ, और मैं करने के लिए alertView पीछे स्क्रीन करने के लिए चाहते हैं घुमाएं लेकिन चेतावनी देखें नहीं। क्या यह भी संभव है?

धन्यवाद।

उत्तर

-2

हाँ आप इसे करते हैं। आप क्या करना है में है - (शून्य) viewwillappear विधि बस निम्नलिखित कोड

if (self.interfaceOrientation == <current orientation>) { 
     [[UIDevice currentDevice] performSelector:NSSelectorFromString(@"setOrientation:") withObject:(id)<to which orientation you want to change.>]; 
    } 

यह आपकी समस्या

+2

यह API छुपा हुआ है, UIDevice उदाहरणों के लिए अभिविन्यास गुण केवल पढ़ने के लिए है, इसलिए इससे आपको ऐप्पल द्वारा समीक्षा प्रक्रिया के दौरान समस्याएं हो सकती हैं। –

+0

<किस अभिविन्यास को आप बदलना चाहते हैं।>, UIInterfaceOrientation के प्रकार को आईडी पर नहीं जोड़ा जा सकता है। कामकाज क्या है? – schellsan

0
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
     return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationLandscapeLeft); 
    } 


    // orientation view swapping logic 
- (void)didRotate:(NSNotification *)notification { 


    UIDeviceOrientation newOrientation = [[UIDevice currentDevice] orientation]; 
    if (newOrientation != UIDeviceOrientationUnknown || newOrientation != UIDeviceOrientationFaceUp || newOrientation != UIDeviceOrientationFaceDown) 
    { 
      orientation = newOrientation; 

    } 

    // Write your orientation logic here 
     if ((orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight)) 
    { 
    // Clear the current view and insert the orientation specific view. 
     [self clearCurrentView]; 
     [self.view insertSubview:yourLandscapeView atIndex:0]; 

    } else if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) 
    { 
      // Clear the current view and insert the orientation specific view. 
      [self clearCurrentView]; 
      [self.view insertSubview:yourPortraitView atIndex:0]; 

    } 
} 

को सुलझाने और इस घटना में है कि अधिसूचना जोड़ देगा शामिल

0

आप नहीं कर सकते हैं । कम से कम इस तरह से नहीं कि ऐप्पल अनुमति देगा। ऑटोरोटेशन पूरे एप्लिकेशन के लिए समान होने के लिए डिज़ाइन किया गया है। आप कोड बना सकते हैं जो दृश्य को मैन्युअल रूप से घुमाता है, लेकिन जहां तक ​​यूआईडीवीस का संबंध है, आप उसी अभिविन्यास में होंगे।

1

आपकी स्थिति के लिए सबसे अच्छा समाधान उपयोगकर्ता को इसे परिदृश्य अभिविन्यास में बदलने के लिए सूचित करना है और जब तक उपयोगकर्ता अभिविन्यास को बदल नहीं देता तब तक प्रोग्राम को रोकें। और फिर जब उपयोगकर्ता डिवाइस को घुमाता है तो आप प्रतिनिधि विधियों को संभाल सकते हैं और लैंडस्केप मोड में स्क्रीन प्रदर्शित करना शुरू कर सकते हैं। इस दृष्टिकोण को कई ऐप स्टोर एप्लिकेशन में संभाला गया है और ऐसा लगता है कि ऐप स्टोर में ऐप को अनुमोदित करने के सर्वोत्तम तरीकों में से एक है। मुझे उम्मीद है कि यह समझ में आता है।

0
एप्पल के अनुसार

, आप डिवाइस अभिविन्यास रोटेशन एपीआई द्वारा प्रदान की डिफ़ॉल्ट व्यवहार नहीं करना चाहते हैं:

आप यह नियंत्रित कर सकते हैं:

  • अपने अनुप्रयोग
  • द्वारा समर्थित झुकाव
  • स्क्रीन पर दो ओरिएंटेशन के बीच एक रोटेशन एनिमेटेड है।

तरह से मैं यह पढ़ "आप इन बातों का या तो नियंत्रित कर सकते हैं, लेकिन कुछ भी बाकी" या "आप केवल इन दो चीजों को नियंत्रित करने की अनुमति है।"

मुझे प्रलेखन में कुछ भी दिखाई नहीं देता है जो स्पष्ट रूप से आपको बताता है कि अभिविन्यास को बदलने के लिए "मजबूर" कैसे करें। यह सब डिवाइस द्वारा संभाला जाता है, क्योंकि यह डिवाइस धारण करने वाले व्यक्ति के लिए अधिक प्राकृतिक और अनुकूल लगता है। क्या इसका कोई मतलब है?

रोटेशन परिवर्तन पर यहां डॉक्स देखें:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDeviceOrientationChanges/RespondingtoDeviceOrientationChanges.html

अंत में, मैं कहूंगा कि यह संभव नहीं है, और आगे कि यह एप्पल द्वारा अनुमोदित नहीं किया जाएगा। मैंने प्रवीण के जवाब को वोट दिया क्योंकि मुझे लगता है कि आप जो करने की कोशिश कर रहे हैं उसके लिए आपको एक अलग दृष्टिकोण पर विचार करने की आवश्यकता हो सकती है।

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

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