iOS
स्विफ्ट: मुख्य या लॉगिन / ऑनबोर्डिंग प्रवाह को प्रस्तुत करने के लिए AppDelegate में rootViewController को बदलना
खोज…
परिचय
अक्सर अपने ऐप के नए उपयोगकर्ताओं के लिए पहला-रन का अनुभव पेश करना उपयोगी होता है। यह किसी भी संख्या में कारणों से हो सकता है, जैसे कि उन्हें साइन इन करने के लिए संकेत देना (यदि आपकी स्थिति के लिए आवश्यक है), यह समझाते हुए कि ऐप का उपयोग कैसे करें, या बस उन्हें अपडेट में नई सुविधाओं के बारे में सूचित करें (नोट्स, फ़ोटो और संगीत के रूप में) iOS11)।
टिप्पणियों
सबसे पहले, जैसा कि आप कई प्रवाह के साथ काम कर रहे हैं, यह वह जगह है जहां स्टोरीबोर्ड का प्रभावी ढंग से उपयोग किया जा सकता है। डिफ़ॉल्ट रूप से आपका एप्लिकेशन आपके प्राथमिक प्रवाह के लिए Main.storyboard
का उपयोग करता है। आपके ऑनबोर्डिंग / वैकल्पिक प्रवाह को एक माध्यमिक स्टोरीबोर्ड में शामिल किया जा सकता है, जैसे। Onboarding.storyboard
इसके कई फायदे हैं:
- डेवलपर्स की एक टीम में, प्रत्येक उपयोगकर्ता प्रवाह पर काम को अलग किया जा सकता है
- स्पष्ट स्रोत नियंत्रण (git)
- चिंताओ का विभाजन
जब आपका ऐप लॉन्च होता है, तो आप यह निर्धारित कर सकते हैं कि कौन सा प्रवाह प्रस्तुत किया जाना चाहिए। इसके लिए तर्क आपके AppDelegate में निहित हो सकते हैं:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let isFirstRun = true // logic to determine goes here
if isFirstRun {
showOnboarding()
}
return true
}
ऑनबोर्डिंग प्रवाह को दिखाने के लिए, यह विचार करने के लायक है कि आप इसे उपयोग करने के अनुभव को संभालना चाहते हैं जब एक बार इसका उपयोग करने वाले व्यक्ति ने यात्रा पूरी कर ली है, और जो आप बनाने की कोशिश कर रहे हैं, उसके लिए शब्दार्थ सही है।
दृष्टिकोण:
दो मुख्य दृष्टिकोण हैं:
- ऐप की मुख्य विंडो के रूट व्यू कंट्रोलर को स्वैप करें
- ऑनबोर्डिंग प्रवाह को मुख्य प्रवाह को ओवरलैप करते हुए एक मोडल यात्रा के रूप में प्रस्तुत करें।
इसे लागू करने को AppDelegate के विस्तार में समाहित किया जाना चाहिए।
विकल्प 1: रूट व्यू नियंत्रक (अच्छा) स्वैप करें
रूट व्यू कंट्रोलर को स्विच करने के फ़ायदे हैं, हालाँकि संक्रमण विकल्प UIViewAnimationOptions
द्वारा समर्थित लोगों तक सीमित हैं, इसलिए आप प्रवाह के बीच संक्रमण कैसे करना चाहते हैं इसके आधार पर इसका मतलब हो सकता है कि आपको एक कस्टम संक्रमण लागू करना होगा - जो बोझिल हो सकता है।
आप केवल UIApplication.shared.keyWindow.rootViewController
सेटिंग करके ऑनबोर्डिंग प्रवाह दिखा सकते हैं
बर्खास्तगी को UIView.transition(with:)
और संक्रमण शैली को UIViewAnimationOptions
रूप में पारित करके, इस मामले में क्रॉस UIView.transition(with:)
द्वारा नियंत्रित किया जाता है। (फ़्लिप और कर्ल भी समर्थित हैं)।
इससे पहले कि आप इसे फिर से शुरू कर रहे हैं, आपको इसे वापस करने से पहले मुख्य दृश्य का फ्रेम भी सेट करना होगा।
// MARK: - Onboarding
extension AppDelegate {
func showOnboarding() {
if let window = UIApplication.shared.keyWindow, let onboardingViewController = UIStoryboard(name: "Onboarding", bundle: nil).instantiateInitialViewController() as? OnboardingViewController {
onboardingViewController.delegate = self
window.rootViewController = onboardingViewController
}
}
func hideOnboarding() {
if let window = UIApplication.shared.keyWindow, let mainViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() {
mainViewController.view.frame = window.bounds
UIView.transition(with: window, duration: 0.5, options: .transitionCrossDissolve, animations: {
window.rootViewController = mainViewController
}, completion: nil)
}
}
}
विकल्प 2: वर्तमान वैकल्पिक प्रवाह सामान्य रूप से (बेहतर)
सबसे सरल कार्यान्वयन में, ऑनबोर्डिंग प्रवाह को केवल एक मामूली संदर्भ में प्रस्तुत किया जा सकता है, क्योंकि शब्दार्थ उपयोगकर्ता एकल यात्रा पर है।
[ऐपल ह्यूमन इंटरफ़ेस गाइडलाइन्स - मोडैलिटी] [१]:
जब किसी का ध्यान आकर्षित करना हो, जब किसी कार्य को पूरा करना या ऐप का उपयोग जारी रखने के लिए या महत्वपूर्ण डेटा को सहेजने के लिए छोड़ देना आवश्यक हो, तो केवल एक मोडल संदर्भ बनाने पर विचार करें।
मामूली रूप से प्रस्तुत करने से यात्रा के अंत में बर्खास्तगी के सरल विकल्प की अनुमति मिलती है, जिसमें स्वैपिंग नियंत्रकों की संख्या कम होती है।
कस्टम ट्रांज़िशन भी मानक तरीके से समर्थित हैं, क्योंकि यह ViewController.present()
एपीआई का उपयोग करता है:
// MARK: - Onboarding
extension AppDelegate {
func showOnboarding() {
if let window = window, let onboardingViewController = UIStoryboard(name: "Onboarding", bundle: nil).instantiateInitialViewController() as? OnboardingViewController {
onboardingViewController.delegate = self
window.makeKeyAndVisible()
window.rootViewController?.present(onboardingViewController, animated: false, completion: nil)
}
}
func hideOnboarding() {
if let window = UIApplication.shared.keyWindow {
window.rootViewController?.dismiss(animated: true, completion: nil)
}
}
}