2011-06-08 23 views
7

मुझे पता है कि इस विषय को SO पर बहुत अधिक ध्यान दिया जाता है, लेकिन मेरे "समाधान" में से कोई भी मेरे लिए काम नहीं कर रहा है। यहाँ की स्थिति है:फ्लैट डिवाइस

  1. आईपैड मेरी मेज पर फ्लैट है (एक चेहरा डिवाइस ओरिएंटेशन), होम स्क्रीन पूरी तरह से पढ़ी जा सकती है, लेकिन होम बटन शीर्ष पर है। तो यह प्रभावी ढंग से "पोर्ट्रेट अप साइड डाउन" इंटरफ़ेस अभिविन्यास दिखाता है।

  2. मैं अपने ऐप शुरू

  3. एप्लिकेशन beginGeneratingDeviceOrientationNotifications कॉल यकीन है कि accelerometer काम कर रहा है, और अभिविन्यास अधिसूचना में आते हैं।

  4. स्टार्टअप पर, मेरे ऐप प्रश्नों दोनों "इंटरफेस उन्मुखीकरण" और "डिवाइस अभिविन्यास"। परिणाम हैं:

    STARTUP ORIENTATION: 
        INTERFACE ORIENTATION: UIInterfaceOrientationPortrait 
        DEVICE ORIENTATION: UIDeviceOrientationFaceUp 
    

    एप्पल डॉक्स का कहना है कि प्रत्येक ऐप्लिकेशन (इंटरफ़ेस?) पोर्ट्रेट ओरिएंटेशन में शुरू होता है, तो यह समझ बनाने के कर सकते हैं। डिवाइस अभिविन्यास भी सही है, क्योंकि यह वास्तव में सामना कर रहा है। शुरू करने के बाद

  5. ठीक है, पहले उन्मुखीकरण अधिसूचना में आ रहा है:

    NOTIFICATION 1: 
        INTERFACE: UIInterfaceOrientationPortrait 
        DEVICE: UIDeviceOrientationPortrait 
    

    फिर, इंटरफ़ेस, (जो मैं क्या उम्मीद थी के विपरीत है के लिए चित्र, होम स्क्रीन में ही ऊपर की ओर में पता चला डाउन ओरिएंटेशन), डिवाइस को पोर्ट्रेट में भी कहा जाता है (जो ऐसा नहीं है, लेकिन यह डिवाइस के चेहरे पर या नीचे होने पर आपके ऐप की सामग्री को उन्मुख करने के तरीके के लिए एक चालाक योजना है।)

  6. के रूप में कई लोगों का उल्लेख है, एक और (सिर्फ एक, नहीं दो) उन्मुखीकरण अधिसूचना इस प्रकार है:

    NOTIFICATION 2: 
        INTERFACE: UIInterfaceOrientationPortrait 
        DEVICE: UIDeviceOrientationFaceUp 
    

    फिर भी चित्र (और ऊपर नीचे पक्ष नहीं) इंटरफेस के लिए, और वापस चेहरा अप करने के लिए डिवाइस के लिए (जो सही है)।

मेरा ऐप स्वयं को सही तरीके से समायोजित करता है, और नीचे दिखाया गया है, जो पूरी तरह से गलत है।

अंतिम ज्ञात अभिविन्यास जानने के लिए मैं क्या कर सकता हूं, जो कि होम स्क्रीन और आईपैड पर अन्य यूआई में दिखाया गया है?

यह सिर्फ एक खिड़की और दृश्य के साथ एक ओपनजीएल ऐप है। मैंने यह देखने के लिए मिश्रण में एक UIViewController जोड़ा है कि यह अधिक सटीक जानकारी देता है, लेकिन यह वही है, और गलत है। मुझे पता है कि मैं इसके साथ संघर्ष करने वाला एकमात्र देव नहीं हूं, क्योंकि मेरे आईपैड पर मेरे कई ऐप्स भी गलत हैं, आपको डिवाइस को झुकाव करना होगा ताकि वे उन्हें सही तरीके से उन्मुख बना सकें। लेकिन कुछ ऐप्स करते हैं यह सही लगता है, रहस्य क्या है? यदि आपके ऐप की Info.plist फ़ाइल में UISupportedInterfaceOrientations संपत्ति:

+0

मुझे आईपैड विकास के बारे में कुछ नहीं पता, लेकिन कैसे होगा डिवाइस सपाट होने पर "अभिविन्यास" का पता लगाने के लिए शारीरिक रूप से संभव हो सकता है? –

+0

ओली, जो मैं बाद में हूं, जिसे मैंने वास्तव में स्पष्ट नहीं किया है, वह है * आखिरी ज्ञात * अभिविन्यास, जो आईपैड यूआई में दिखाया गया है। मैं इसे जोड़ दूंगा। – zmippie

+0

क्या आप वाकई उन्मुखता प्रदर्शित करने वाले कोड सही हैं? यदि डिवाइस सपाट है, तो उसे वही अभिविन्यास रखना चाहिए (जब तक कि आपका ऐप इसका समर्थन नहीं करता)। – ughoavgfhw

उत्तर

4

ठीक है, मुझे लगता है कि मैं भूलभुलैया है कि IOS डिवाइस/इंटरफ़ेस झुकाव में एक आवश्यक टुकड़ा को नजरअंदाज किया था स्वीकार करना होगा करने के लिए खुश नहीं हूँ।

मैंने इसके बारे में पढ़ा और (गलत तरीके से) माना कि समर्थित उन्मुखताओं को निर्दिष्ट करके, व्यवहार नहीं बदलेगा। लेकिन जैसा कि यह पता चला है, यह केवल उन्मुखीकरण अधिसूचनाओं पर एक फ़िल्टर नहीं है (यह नहीं है, आपको अभी भी असमर्थित ऑरियंस के लिए अधिसूचनाएं मिलती हैं), लेकिन डिवाइस उन्मुख होने के आधार पर अधिसूचनाओं का प्रकार/क्रम अलग है।

मेरे मामले में, मुझे "फेस अप" और "फेस डाउन" ओरिएंटेशन में दिलचस्पी नहीं थी, इसलिए मैंने उन्हें अनदेखा कर दिया। यह एक अच्छा विचार नहीं है। आप स्पष्ट रूप से समर्थित झुकाव निर्दिष्ट करते हैं:

<key>UISupportedInterfaceOrientations</key> 
<array> 
    <string>UIInterfaceOrientationPortrait</string> 
    <string>UIInterfaceOrientationPortraitUpsideDown</string> 
    <string>UIInterfaceOrientationLandscapeLeft</string> 
    <string>UIInterfaceOrientationLandscapeRight</string> 
</array> 

... तो आप अभी भी व्यवहार देखेंगे के रूप में मैं ऊपर टिप्पणी में वर्णन:

"अनिवार्य रूप से, डिवाइस उपयोगकर्ता दावा कर रहा है वास्तव में जल्दी से यह हिला कर रख दिया एक सीधा स्थिति पर वापस, और वापस नीचे। "

... लेकिन पहले पारित अभिविन्यास हमेशा चित्र नहीं है, बल्कि इसके बजाय सही अभिविन्यास है।

तो, स्थिति में मैं अपने प्रश्न में वर्णन है, डिवाइस झुकाव के रूप में किया जाएगा इस प्रकार है:

AT STARTUP: UIDeviceOrientationFaceUp 
NOTIFICATION 1: UIDeviceOrientationPortraitUpsideDown <-- CORRECT! 
NOTIFICATION 2: UIDeviceOrientationFaceUp <-- CORRECT, BUT IGNORE 

मैं जहाँ तक जाने के लिए और एप्पल की ओर से यह एक बग कॉल करने के लिए नहीं चाहते हैं, लेकिन यह मेरे लिए अस्पष्ट है कि NOTIFICATION 1 में उत्तीर्ण अभिविन्यास हमेशा चित्र होता है जब आप UISupportedInterfaceOrientations निर्दिष्ट नहीं करते हैं।

ध्यान दें कि यह केवल आईपैड पर लागू होता है। आईपॉड टच और आईफोन पर होम स्क्रीन यूआई हमेशा पोर्ट्रेट में होता है, इसलिए यह जानना आसान होता है कि यह अभिविन्यास लॉन्च होने पर क्या था (आपने अनुमान लगाया था: चित्र) ...