IOS ऐप में एक और UIWindow जोड़ने के फायदे, समस्याएं, उदाहरण?


92

हाल ही में मैं इस तथ्य के बारे में सोच रहा हूं कि आईओएस ऐप में केवल एक ही है UIWindow। यह एक UIWindowऔर बनाने और इसे स्क्रीन पर रखने के लिए एक मुद्दा नहीं लगता है ।

मेरा प्रश्न अस्पष्ट है, लेकिन मुझे इसमें दिलचस्पी है:

  • मैं संभवतः एक दूसरे के साथ क्या हासिल कर सकता हूं UIWindowजो अन्य तरीकों से नहीं किया जा सकता है?
  • कई UIWindowउदाहरणों का उपयोग करते समय क्या गलत हो सकता है ?
  • मैंने देखा है कि लोग UIWindowआईफ़ोन पर विचारों की तरह पॉपओवर प्रदर्शित करने के लिए एक 2 का उपयोग करते हैं । क्या यह इसे करने का एक अच्छा तरीका है? क्यों? क्यों नहीं?
  • क्या ऐसे अन्य उदाहरण हैं जहां यह दूसरे के लिए पूरी तरह से समझ बना रहा है UIWindow?

ऐसा नहीं है कि मुझे कुछ याद आ रहा है। मैंने कभी भी एक और UIWindowउदाहरण बनाने की आवश्यकता महसूस नहीं की है, लेकिन शायद यह अद्भुत चीजें करने की अनुमति देगा जिनके बारे में मुझे पता नहीं है! :-)

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


IOS अनुप्रयोगों में कई UIWindows का उपयोग करना shaune.com.au/use-multiple-uiwindows-in-ios-applications
onmyway133

जवाबों:


26

A UIWindowसिस्टम कीबोर्ड की तरह अन्य UI तत्वों के ऊपर तैर सकता है।

अपने अंतिम पैराग्राफ को संबोधित करने के लिए: UIWindowअपनी मुख्य विंडो के समान फ्रेम के साथ बनाएं । इसकी windowLevelसंपत्ति निर्धारित करें UIWindowLevelStatusBar। इसकी hiddenसंपत्ति निर्धारित करें NO


ठीक है, ठीक है। धन्यवाद। मैं जानता था कि। क्या आप मेरे सवालों के बारे में विस्तार से जान सकते हैं? क्या आप जानते हैं कि UIKindVIEW द्वारा जोड़े गए UIWindow के सेकंड्स की RID कैसे प्राप्त करें?
Krumelur

दूसरे UIWindow की छिपी हुई संपत्ति को YES पर सेट करें।
मई को 21:00 बजे लूटना

धन्यवाद। और मैं खिड़की को कुंजी और दृश्यमान बनाकर दिखाता हूं? और मैं इसे ANOTHER विंडो को दृश्यमान बनाकर छिपाता हूं और दूसरे को डिस्पोज कर रहा हूं? मैं एक UIWindow को कैसे पसंद कर सकता हूं जैसे कि UIActionSheet करता है?
क्रुमेलूर

इससे सावधान रहें। अगर! = UIWindowLevelNormal, कीबोर्ड इसे <iOS7 पर दिखाएगा।
शॉन

108

रोब के जवाब के साथ शुरू हुआ जो मैंने थोड़ा सा खेला और इस विषय पर जानकारी प्राप्त करने की कोशिश कर रहे अन्य लोगों के लिए कुछ नोट्स लिखना चाहूंगा:

  • दूसरे को जोड़ना कोई समस्या नहीं है UIWindow। बस एक और बनाएँ makeKeyAndVisible। किया हुआ।
  • इसे एक और विंडो को दृश्यमान बनाकर निकालें, फिर उसे जारी करें जिसकी आपको अब आवश्यकता नहीं है।
  • विंडो जो "कुंजी" है, वह सभी कीबोर्ड इनपुट प्राप्त करती है।
  • UIWindow सब कुछ शामिल है, यहां तक ​​कि मॉडल, पॉपओवर, आदि।
  • UIWindowहमेशा स्पष्ट रूप से चित्र है। इसका कोई चक्कर नहीं है। आपको नई विंडो के रूट कंट्रोलर के रूप में एक नियंत्रक जोड़ना होगा और उस घुमाव को संभालने देना होगा। (मुख्य खिड़की की तरह)
  • विंडो का स्तर निर्धारित करता है कि यह "उच्च" कैसे प्रदर्शित होता है। यह UIWindowLevelStatusBarसब कुछ कवर करने के लिए इसे सेट करें । इसकी hiddenसंपत्ति NO पर सेट करें ।
  • एक 2 UIWindowका उपयोग स्क्रीन पर विचारों को लाने के लिए किया जा सकता है जो सब कुछ के ऊपर तैरता है। एक डमी नियंत्रक बनाने के बिना बस उस में एम्बेड करने के लिए UIPopoverController
  • यह iPhone पर विशेष रूप से उपयोगी हो सकता है जहां कोई पॉपओवर नियंत्रक नहीं है, लेकिन जहां आप कुछ इस तरह की नकल करना चाहते हैं।
  • और हां, इससे मेरी समस्या का समाधान हो गया: यदि ऐप सक्रियण से इस्तीफा दे देता है, तो वर्तमान में iOS को आपके ऐप की वर्तमान सामग्री का स्क्रीनशॉट लेने से रोकने के लिए जो कुछ भी दिखाया गया है, उस पर एक कवर विंडो जोड़ें।

यदि आपके उत्तर के लिए मैं दूसरे UIWindow का उपयोग करने का साहस नहीं करता। यह भी बहुत मददगार था क्योंकि दूसरा UIWindow अपने आप में ऑटोरोटेट नहीं करेगा।
दान अब्रामोव

1
बहुत ज्ञानवर्धक पोस्ट। लेकिन क्या होगा यदि आप इस विंडो को इस्तीफा देते हैं और अंतर्निहित विंडो को कुंजी और दृश्यमान बनाते हैं और इस अंतर्निहित विंडो के rootViewController में वर्तमान में एक मोडल नियंत्रक है? क्या यह मोडल व्यू कंट्रोलर को वापस पेश करेगा? हमारे आवेदन में क्या होता है कि rootViewController प्रस्तुत नहीं है एक मोडल ...
Nava Carmon

@Krumelur यह ठीक है। मुझे एक शंका है। यह कहें कि, वर्तमान में सभी विचारों के शीर्ष पर 2 UIWindow प्रदर्शित है। जब उपयोगकर्ता उस दृश्य पर एक बटन पर क्लिक करता है जो 1 UIWindow में होता है जो एक और व्यू-कंट्रोलर प्रस्तुत कर रहा है। यह 2 UIWindow छिपाएगा। इस UIWindow को पूरे ऐप में हमेशा प्रदर्शित करने के लिए कैसे करें।
ईस्वरमूर्ति के

1
मैं कस्टम स्टाइल अलर्ट विचारों और iPhone पॉपओवर को लागू करने के लिए हर समय UIWindow का उपयोग करता हूं। यह हमेशा फ़ुलस्क्रीन बनाने में मदद करता है, जिसमें फ़ुलस्क्रीन दृश्य होता है और अंदर एक और "सामग्री" -व्यू को एम्बेड करना होता है ताकि बाहरी दृश्य किसी भी स्पर्श की घटनाओं को पकड़ सके (और इसलिए मैं एक अच्छी छाया जोड़ सकता हूं और मेरी अन्य सामग्री को मंद कर सकता हूं ^ ^)
मार्टिन उल्रिक्

3
यह ध्यान दिया जाना चाहिए कि एक दूसरी खिड़की को केवल दृश्यमान बनाए रखने के लिए ही नहीं रखा जाता है (इसके विपरीत नियमित विचारों को उनके पर्यवेक्षण द्वारा बनाए रखा जाता है)।
रिवर

0

यहाँ UIWindow को बेहतर तरीके से समझने के लिए Apple का दस्तावेज़ीकरण है : https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html

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

वास्तव में, यदि आप ReplayKit का उपयोग कर रहे हैं, तो आपको इन बहिष्कृत UI तत्वों के लिए एक अलग UIWindow का उपयोग करना होगा । अधिक जानकारी यहाँ: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-ccca8e31e

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.