2015-10-07 8 views
9

ऐसा लगता है कि विधि viewWillTransitionToSize:withTransitionCoordinator: कई बार कहा जाता हो जाता है जब एप्लिकेशन को पृष्ठभूमि या निष्क्रिय आईओएस 9.viewWillTransitionToSize: withTransitionCoordinator: कहा जाता है जब एप्लिकेशन या पृष्ठभूमि में चला जाता है निष्क्रिय

उदाहरण के लिए के बाद से में चला जाता है, यदि अनुप्रयोग है आईपैड पर पोर्ट्रेट में, होम बटन दबाकर ऐप को 1024x768 (लैंडस्केप) के आकार और फिर 768x1024 (पोर्ट्रेट पर वापस) के साथ विधि कॉल प्राप्त करने का कारण बन जाएगा। इससे मुझे यह निष्कर्ष निकाला जाता है कि ऐप आईप स्विचर के लिए स्क्रीनशॉट प्राप्त करने के लिए ऐसा करता है।

हमारा एप्लिकेशन तर्क स्क्रीन आकार और स्क्रीन आकार ट्रिगर कार्यों में परिवर्तन करता है जो नए आकार के संबंध में हमारे मॉडल को अपडेट करते हैं। हमें यह करने की ज़रूरत है जब उपयोगकर्ता डिवाइस को घुमाता है या मल्टीटास्किंग मोड (स्प्लिट व्यू) में जाता है, लेकिन जब उपयोगकर्ता पृष्ठभूमि में जाता है तो हमें यह नहीं करना चाहिए।

एक विचार UIApplicationWillResignActiveNotification अधिसूचना उपयोग करने के लिए गया था, लेकिन उस सूचना भेजे जाने से पहले क्योंकि कभी-कभी viewWillTransitionToSize:withTransitionCoordinator: कहा जाता हो जाता है असंभव मिशन साबित हुआ और सूचना के बाद भेज दिया जाता है यह कहा जाता हो जाता है othertimes:/

कोई भी विचार ?

उत्तर

1

मुझे वर्तमान में एक ही समस्या है। जब आकार बदलता है और पृष्ठभूमि में जाने पर यह हो रहा है तो मैं बहुत काम करता हूं। एक चीज जो मेरे लिए "सबसे अधिक समय" काम कर रही है यह जांचना है कि ऐप पृष्ठभूमि में है [uiapplication sharedAplication] applicationState]। एप्लिकेशन स्टेटस को देखने के लिए 2 अतिरिक्त कॉल से पहले UIApplicationStateBackground पर सेट किया गया है TTSize बनाया गया है। यह संगत लगता है। मुझे कुछ समस्याएं आ रही हैं जब ऐप मल्टीटास्किंग का उपयोग करने में स्वाइप किया जाता है, फिर पृष्ठभूमि में जाता है और फिर पूर्ण आकार में फिर से अग्रभूमि होता है। इस मामले में कॉल का क्रम यह निर्धारित करने के लिए प्रतीत नहीं होता है कि किस आकार में परिवर्तन का उपयोग किया जाना चाहिए।

+0

मेरे वर्तमान समाधान का 0.1 सेकंड से viewWillTransitionToSize में तर्क स्थगित और जाँच करें कि क्या UIApplication.sharedApplication()। ApplicationState अभी भी सक्रिय है के लिए है। यह बदसूरत हैक है, लेकिन मुझे इसके चारों ओर कोई और रास्ता नहीं दिख रहा है। –

0

यूप, एक ही समस्या। आप 0.1 सेकंड का उपयोग करने के बजाय, समन्वयक के transitionDuration() का उपयोग कर सकते हैं। फिर, पृष्ठभूमि की स्थिति की जांच करें।

+0

दुर्भाग्यवश यदि आप एनीमेशन पूरा होने से पहले राज्य में रूचि रखते हैं तो नहीं ... –

1

viewWillTransitionToSize:withTransitionCoordinator में आप संक्रमण को पूरा करने के बारे में बताने के लिए UIViewControllerTransitionCoordinator का उपयोग कर सकते हैं। फिर, जांचें कि आपका ऐप पृष्ठभूमि नहीं है और आपका तर्क निष्पादित करता है।

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 

     // after transition 

     if ([UIApplication sharedApplication].applicationState != UIApplicationStateBackground) { 
      // perform logic 
     } 
    }]; 
} 
+1

यदि आप पावर बटन दबाते हैं, तो कई बार यह सक्रिय हो जाएगा। – Rajneesh071

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