viewDidAppear UIViewController की एक विधि है जिसे UIKit तब कॉल करता है जब स्क्रीन डिस्प्ले पर पूरी तरह दिखाई दे चुकी हो और सभी ट्रांज़िशन एनिमेशन पूरे हो चुके हों। Apple Developer Documentation के अनुसार, यह विधि गारंटी देती है कि View उपयोगकर्ता को दिखाई दे रही है और इंटरैक्शन के लिए तैयार है। viewDidAppear एनिमेशन, ट्रैकिंग और एसिंक्रोनस ऑपरेशन शुरू करने के लिए सबसे उपयुक्त स्थान है।
मुख्य बातें
viewDidAppear UIViewController की एक विधि है जिसे UIKit तब कॉल करता है जब View को विंडो पदानुक्रम में जोड़ दिया गया हो और ट्रांज़िशन एनिमेशन पूरी तरह समाप्त हो गया हो। इस बिंदु पर, स्क्रीन अपनी अंतिम स्थिति में होती है: यह दिखाई देती है, इसके साथ इंटरैक्ट किया जा सकता है, और सभी UIKit एनिमेशन रुक चुके होते हैं। डेवलपर इस विधि को ओवरराइड करता है उन कार्यों को करने के लिए जिनके लिए स्क्रीन का उपयोगकर्ता के सामने होना आवश्यक है।
viewWillAppear के विपरीत, जहाँ स्क्रीन केवल दिखाने की तैयारी कर रही होती है, viewDidAppear संकेत देता है कि उपयोगकर्ता पहले से ही इंटरफ़ेस देख रहा है। यह एक महत्वपूर्ण अंतर है: viewWillAppear में एनिमेशन शुरू करने से फ्रेम ड्रॉप हो सकते हैं क्योंकि UIKit अभी भी ट्रांज़िशन प्रोसेस कर रहा होता है। viewDidAppear में, ट्रांज़िशन पूरा हो चुका होता है और कंट्रोलर के संसाधनों का उपयोग नई सामग्री रेंडर करने के लिए किया जा सकता है।
यह विधि viewWillAppear के समान, Bool प्रकार का animated पैरामीटर स्वीकार करती है। यदि true है, तो स्क्रीन की उपस्थिति एनिमेशन के साथ हुई थी। इस पैरामीटर का उपयोग UI व्यवहार को अनुकूलित करने के लिए किया जा सकता है: उदाहरण के लिए, बिना एनिमेशन के वापसी पर प्रवेश एनिमेशन को छोड़ना।
viewDidAppear सभी परिदृश्यों में कॉल होता है जहाँ स्क्रीन ने अपनी उपस्थिति प्रक्रिया पूरी कर ली हो। आइए iOS डेवलपर के दृष्टिकोण से मुख्य मामलों को देखें।
UINavigationController द्वारा push या pop एनिमेशन समाप्त करने के बाद, लक्ष्य कंट्रोलर पर viewDidAppear कॉल होता है। स्टैक में पहली स्क्रीन के लिए, यह प्रारंभिक ओपनिंग एनिमेशन के बाद चालू होता है। यह मुख्य परिदृश्य है, और viewDidAppear में लॉजिक रखते समय डेवलपर मुख्य रूप से इसी को लक्षित करते हैं।
जब उपयोगकर्ता मोडली प्रस्तुत कंट्रोलर को बंद करता है और पिछले वाले पर वापस आता है, तो UIKit वापस आने वाले कंट्रोलर पर viewDidAppear कॉल करता है। animated पैरामीटर इस बात के अनुरूप होगा कि क्या dismiss एनिमेशन के साथ किया गया था। यह क्षण चाइल्ड स्क्रीन से डेटा प्राप्त करने के बाद UI को अपडेट करने के लिए महत्वपूर्ण है।
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
logScreenView()
startOnboardingAnimation()
}
UITabBarController स्विच एनिमेशन पूरा होने के बाद चयनित टैब के कंट्रोलर पर viewDidAppear कॉल करता है। यह viewWillAppear से भिन्न है, जो स्विच शुरू होने पर चालू होता है। यदि किसी टैब में स्वागत एनिमेशन है या आपको सक्रिय समय ट्रैक करने की आवश्यकता है, तो viewDidAppear सही स्थान है।
जब ऐप बैकग्राउंड से फोरग्राउंड में वापस आता है, तो दृश्य कंट्रोलर पर viewWillAppear और viewDidAppear कॉल हो सकते हैं यदि View का जीवनचक्र अस्थायी रूप से निलंबित कर दिया गया था। हालांकि, बैकग्राउंड से वापसी के विश्वसनीय ट्रैकिंग के लिए, अलग से UIApplication.willEnterForegroundNotification का उपयोग करें।
viewDidAppear उन कार्यों को संभालता है जिनके सही निष्पादन के लिए दृश्य स्क्रीन की आवश्यकता होती है। आइए वास्तविक प्रोजेक्ट्स में मुख्य उपयोग परिदृश्यों को देखें।
viewDidAppear का सबसे सामान्य कार्य स्क्रीन व्यू का ट्रैकिंग है। Firebase Analytics, Amplitude या Mixpanel जैसी एनालिटिक्स प्रणालियों को केवल स्क्रीन के उपयोगकर्ता को वास्तव में दिखाए जाने के बाद ही इवेंट प्राप्त करने चाहिए। viewWillAppear में इवेंट भेजने से देखने के समय को कम आंका जा सकता है और गलत सक्रियताएँ पैदा हो सकती हैं।
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
Analytics.logEvent(
name: "screen_view",
parameters: [
"screen_name": "ProfileScreen",
"screen_class": String(describing: self)
]
)
}
एनिमेशन जो स्क्रीन दिखने के बाद शुरू होने चाहिए — तत्वों की क्रमिक उपस्थिति, पैरालैक्स, ट्यूटोरियल — viewDidAppear में शुरू किए जाते हैं। इस बिंदु पर, ग्राफ़िक्स संदर्भ पूरी तरह तैयार होता है, और एनिमेशन बिना फ्रेम ड्रॉप के स्मूथ होगा। यह UIViewPropertyAnimator का उपयोग करने वाले एनिमेशन के लिए विशेष रूप से महत्वपूर्ण है।
भारी एसिंक्रोनस ऑपरेशन — उच्च-रिज़ॉल्यूशन छवियाँ लोड करना, बड़े JSON को पार्स करना, वीडियो आरंभ करना — viewDidLoad या viewWillAppear के बजाय viewDidAppear में शुरू करना बेहतर है। जब तक विधि कॉल होती है, उपयोगकर्ता पहले से ही इंटरफ़ेस देख रहा होता है, इसलिए आप स्क्रीन उपस्थिति में देरी किए बिना स्केलेटन या लोडर दिखा सकते हैं।
यदि स्क्रीन में ऐसे तत्व हैं जिन्हें आवधिक अपडेट की आवश्यकता है — काउंटडाउन टाइमर, प्रगति संकेतक, प्रगति एनिमेशन — तो वे viewDidAppear में शुरू किए जाते हैं और viewDidDisappear में रोके जाते हैं। यह स्क्रीन के दृश्य न होने पर टाइमर को चलने से रोकता है, जिससे बैटरी जीवन और CPU संसाधनों की बचत होती है।
मीडिया कंटेंट — वीडियो, ऑडियो, Lottie एनिमेशन — viewDidAppear में शुरू किया जाता है, पहले नहीं। यदि आप viewWillAppear में प्लेबैक शुरू करते हैं, तो उपयोगकर्ता पहले कुछ सेकंड खो देगा जबकि स्क्रीन अभी भी दिख रही होती है। viewDidAppear में, आप विश्वास के साथ AVPlayer या Lottie एनिमेशन शुरू कर सकते हैं कि उपयोगकर्ता पहले फ्रेम से कंटेंट देख रहा है। यह ऑनबोर्डिंग स्क्रीन और स्प्लैश स्क्रीन के लिए विशेष रूप से महत्वपूर्ण है जहाँ सटीक समय मायने रखता है।
एनिमेशन शुरू करने का सही समय सीधे इंटरफ़ेस की स्मूथनेस की धारणा को प्रभावित करता है। सरल एनिमेशन के लिए viewWillAppear और viewDidAppear में शुरू करने का अंतर अगोचर हो सकता है, लेकिन जटिल दृश्यों के लिए यह महत्वपूर्ण हो जाता है।
जब UIKit स्क्रीन के बीच push ट्रांज़िशन करता है, तो वह स्क्रीनशॉट लेता है, उन्हें एनिमेट करता है और साथ ही नए कंट्रोलर पर viewWillAppear कॉल करता है। यदि आप इस बिंदु पर भारी एनिमेशन शुरू करते हैं — पैरालैक्स, ब्लर, ट्रांसफ़ॉर्मेशन — तो UIKit ट्रांज़िशन एनिमेशन के फ्रेम ड्रॉप कर सकता है, जिससे झटकेदार प्रभाव पैदा होता है। viewDidAppear गारंटी देता है कि ट्रांज़िशन एनिमेशन पूरा हो चुका है, जिससे आपको रेंडरिंग पर पूर्ण नियंत्रण मिलता है।
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
UIView.animate(
withDuration: 0.6,
delay: 0.3,
usingSpringWithDamping: 0.8,
initialSpringVelocity: 0.5
) {
self.cardView.alpha = 1.0
self.cardView.transform = .identity
}
}
तत्वों की प्राकृतिक कैस्केडिंग उपस्थिति बनाने के लिए देरी और डैंपिंग का उपयोग करें। यह दृष्टिकोण इंटरफ़ेस धारणा में सुधार करता है और dwell time बढ़ाता है — उपयोगकर्ता कंटेंट की खोज में अधिक समय बिताते हैं, जो व्यवहारिक मीट्रिक्स पर सकारात्मक प्रभाव डालता है।
गलत उपयोग viewDidAppear प्रदर्शन समस्याओं, एनिमेशन के अप्रत्याशित व्यवहार और अत्यधिक ट्रैकिंग का कारण बन सकता है। आइए सामान्य गलतियों को देखें।
पहली गलती कई कॉल हैं। कुछ परिदृश्यों में viewDidAppear कई बार कॉल हो सकता है: टैब स्विच करना, बैकग्राउंड से वापसी, मोडल ट्रांज़िशन। यदि विधि फ़्लैग जाँच के बिना कोई भारी ऑपरेशन करती है, तो वह डुप्लिकेट हो जाएगा। एक बार के कार्यों के लिए hasAppeared फ़्लैग या dispatchOnce का उपयोग करें।
दूसरी गलती छिपाने पर रद्दीकरण के बिना नेटवर्क अनुरोध शुरू करना है। यदि उपयोगकर्ता अनुरोध पूरा होने से पहले स्क्रीन छोड़ देता है, तो परिणाम पहले से छिपी हुई View पर लागू हो सकता है। रद्द करने योग्य URLSessionTask का उपयोग करें और उन्हें viewDidDisappear में रद्द करें।
तीसरी गलती viewDidAppear के बजाय viewWillAppear में ट्रैकिंग करना है। कुछ डेवलपर viewWillAppear में एनालिटिक्स इवेंट भेजते हैं, लेकिन यह गलत सक्रियताएँ पैदा करता है यदि स्क्रीन दिखाई नहीं दी (उदाहरण के लिए, रद्द किए गए pop जेस्चर के कारण)। viewDidAppear एकमात्र विश्वसनीय संकेतक है कि उपयोगकर्ता ने वास्तव में स्क्रीन देखी।
चौथी गलती super को भूलना है। super.viewDidAppear को कॉल करना UINavigationController, UITabBarController और UISplitViewController के सही संचालन के लिए आवश्यक है। इसके बिना, मानक नेविगेशन और इंटरफ़ेस अपडेट तंत्र टूट सकते हैं।
पाँचवीं गलती viewDidLayoutSubviews पर विचार किए बिना ओरिएंटेशन या स्क्रीन आकार बदलना है। यदि viewDidAppear में आपका एनिमेशन View के अंतिम आयामों पर निर्भर करता है, तो याद रखें कि viewDidLayoutSubviews viewDidAppear से पहले कई बार कॉल हो सकता है। पहली स्क्रीन उपस्थिति पर, viewDidAppear कॉल होने से पहले लेआउट पूरा हो जाता है, लेकिन बाद के आकार परिवर्तनों पर — उदाहरण के लिए, डिवाइस रोटेशन पर — viewDidAppear कॉल नहीं हो सकता है और आपका एनिमेशन शुरू नहीं होगा। ऐसे मामलों में, firstLayout फ़्लैग जाँच के साथ viewDidLayoutSubviews का उपयोग करें।
सही कार्यान्वयन में एनिमेशन ऑब्जेक्ट का संदर्भ रखना और स्क्रीन छोड़ते समय इसे स्पष्ट रूप से रद्द करना शामिल है। छठी गलती स्टॉप फ़्लैग के बिना अनंत एनिमेशन शुरू करना है। यदि आप viewDidAppear में एक दोहराव वाला एनिमेशन शुरू करते हैं (जैसे, स्पंदित संकेतक या घूमने वाला लोडर) लेकिन इसे viewDidDisappear में नहीं रोकते, तो एनिमेशन स्क्रीन छिपी होने पर भी GPU संसाधनों का उपभोग करेगा। हमेशा सक्रिय एनिमेशन का संदर्भ रखें और संबंधित जीवनचक्र विधि में removeAllAnimations या setCompletion कॉल करें।
सातवीं गलती गतिविधियों को रोकने के लिए viewDidDisappear को अनदेखा करना है। यदि आपने viewDidAppear में GPS, एक्सेलेरोमीटर या जाइरोस्कोप सुनना शुरू किया है, तो इसे viewDidDisappear में रोकना सुनिश्चित करें। अन्यथा, सेंसर बैकग्राउंड में काम करते रहेंगे, बैटरी खत्म करते हुए, भले ही उपयोगकर्ता बहुत पहले दूसरी स्क्रीन पर चला गया हो। संबंधित जीवनचक्र विधियों में युग्मित शुरू और स्टॉप कॉल का उपयोग करें — यह डिवाइस पर सही संसाधन प्रबंधन की गारंटी देता है।
अक्सर पूछे जाने वाले प्रश्न
viewWillAppear उपस्थिति एनिमेशन से पहले कॉल होता है, जब स्क्रीन अभी दिखाई नहीं देती है। viewDidAppear एनिमेशन पूरी तरह पूरा होने के बाद कॉल होता है, जब स्क्रीन दिखाई देती है और इंटरैक्शन के लिए उपलब्ध होती है।
viewDidAppear में, UIKit का ट्रांज़िशन एनिमेशन पहले ही समाप्त हो चुका होता है, और सभी रेंडरिंग संसाधन आपके कंट्रोलर के लिए उपलब्ध होते हैं। पहले एनिमेशन शुरू करने से फ्रेम ड्रॉप और झटकेदार इंटरफ़ेस हो सकता है।
सामान्य जीवनचक्र में, नहीं — viewDidAppear हमेशा viewWillAppear का अनुसरण करता है। हालांकि, कुछ स्थिति बहाली परिदृश्यों में, सिस्टम केवल viewDidAppear कॉल कर सकता है।
firstAppearance के लिए फ़्लैग जाँच जोड़ें या काउंटर और स्क्रीन नाम के संयोजन का उपयोग करें। उदाहरण के लिए, केवल तब screen_view इवेंट भेजें जब firstAppearance = true हो, फिर फ़्लैग रीसेट करें।
बैकग्राउंड से लौटने पर, UIKit दृश्य कंट्रोलर पर viewDidAppear कॉल कर सकता है यदि View मेमोरी से अनलोड हो गई थी। विश्वसनीय ट्रैकिंग के लिए, AppDelegate सूचनाओं का उपयोग करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें