2011-05-23 10 views
5

मैं पृष्ठभूमि में होने की अवधि के बाद उपयोगकर्ताओं को अपने ऐप से लॉक करना चाहता हूं। मैं इसे AppDelegate के applicationWillEnterForeground (और applicationWillResignActive में संग्रहीत समय की तुलना में) में पकड़ रहा हूं। यदि टाइमआउट अवधि से कम कोई कार्रवाई नहीं होती है। अगर समय समाप्ति की अवधि मैं फोन की तुलना में अधिक:एप्लिकेशन से पहले बदलाव देखें WillEnterForeground

[_navigationController popToRootViewControllerAnimated:NO]; 

जो उपयोगकर्ता वापस रूट दृश्य में लाता है।

यह एक दृश्य रुकावट के साथ पूरी तरह से ठीक काम करता है। पूर्व दृश्य (जिसे उपयोगकर्ता निष्क्रिय होने पर उपयोगकर्ता देख रहा था) रूट पर पॉप करने से पहले बहुत संक्षिप्त रूप से प्रकट होता है। परीक्षण में ऐसा लगता है कि दृश्य applicationWillEnterForeground से पहले दिखाई देता है।

केवल सोचा मैं लिया है सब कुछ पहले इस तरह के एक भरा आयत के साथ दृश्य obscuring द्वारा के रूप में निष्क्रिय जा रहा है, को छिपाने के लिए है। यह मुझे एक गंदे हैक की तरह गंध करता है, इसलिए मैं सोच रहा हूं कि एक बेहतर तरीका है।

मैं भी यही अंतिम परिणाम तक पहुंचने के लिए अलग अलग तरीके के लिए खुला रहा हूँ। धन्यवाद!

+0

कहाँ वास्तव में आप से popToRootViewController विधि बुला रहे हैं? – TheBlack

+0

@TheBlack: मैं एप्लिकेशन प्रतिनिधि के 'आवेदन WillEnterForeground' विधि में '[_navigationController popToRootViewControllerAnimated: NO]' को कॉल कर रहा हूं। –

+0

यदि आप अनुप्रयोग WillResignActive में व्यू कंट्रोलर पॉप अप करते हैं, तो आपकी समस्या हल हो जाएगी लेकिन यह आपकी अवधारणा में फिट नहीं है। वैसे भी, आवेदन में VCs पॉपिंग WillResignActive यह करने के लिए सही जगह है। मेरा समाधान हमेशा वीसी पॉप करना था और अगर उपयोगकर्ता कुछ अंतराल में ऐप पर वापस आ गया तो उन्हें पुनर्स्थापित करना था। – TheBlack

उत्तर

0

मैं दृश्य अदृश्य करके इस समाधान कर लिया है। एप्लिकेशन में WillResignActive मेरे पास _navigationController.view.alpha = 0; है, और मैंने _navigationController.view.alpha = 100 रखा है; एप्लिकेशन में (अगर आवश्यक हो) लॉगिन दृश्य में पॉपिंग के बाद। पॉपिंग और विचारों को बहाल करने से आसान (जो इस मामले में बहुत भारी हैं)।

@TheBlack छिपा संपत्ति है, जो शायद डिवाइस पर थोड़ा आसान है बताते हैं। मैं अल्फा छोड़ रहा हूं क्योंकि ए) यह 50% अल्फा व्यू के साथ मजेदार डिबगिंग है, और बी) मुझे अल्फा की तरह ही पसंद है। लेकिन जब तक आप मेरे जैसे अल्फा प्रशंसक नहीं हैं, छुपा कुछ बेहतर हो सकता है।

0

डॉक्स से: Strategies for Handling App State Transitions

कुछ ही समय एक ऐप्लिकेशन प्रतिनिधि के applicationDidEnterBackground के बाद अनुप्रयोग स्नैपशॉट

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

यदि आप पृष्ठभूमि में प्रवेश करने के दौरान अपने विचारों में परिवर्तन करते हैं, तो आप स्नैपशॉट दृश्य_फटरस्क्रीनअपडेट्स को कॉल कर सकते हैं: उन परिवर्तनों को लागू करने के लिए आपके मुख्य दृश्य की विधि। एक दृश्य पर setNeedsDisplay विधि को कॉल करना स्नैपशॉट्स के लिए अप्रभावी है क्योंकि स्नैपशॉट अगले ड्राइंग चक्र से पहले लिया जाता है, इस प्रकार किसी भी बदलाव को प्रस्तुत करने से रोकता है। स्नैपशॉट को कॉल करना ViewAfterScreenUpdates: YES के मान के साथ विधि स्नैपशॉट मशीनरी का उपयोग करने वाले अंतर्निहित बफर को तत्काल अद्यतन देता है।

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