2016-12-14 12 views
12

मैं एक टैब बार के साथ एक और रूट व्यू कंट्रोलर पर स्वैप करने की कोशिश कर रहा हूं; ऐप प्रतिनिधि के माध्यम से, और मैं संक्रमण एनीमेशन जोड़ना चाहता हूँ। डिफ़ॉल्ट रूप से यह केवल बिना किसी एनीमेशन के दृश्य दिखाएगा।एनीमेशन के साथ rootViewController स्वैप करें?

let tabBar = self.instantiateViewController(storyBoard: "Main", viewControllerID: "MainTabbar") 
let appDelegate = UIApplication.shared.delegate as! AppDelegate 
appDelegate.window = UIWindow(frame: UIScreen.main.bounds) 
appDelegate.window?.rootViewController = tabBar 
appDelegate.window?.makeKeyAndVisible() 

इस तरह मैं एक और रूटव्यू नियंत्रक के लिए बदल गया।

उत्तर

52

मैं UIView.transition(from: view, to: view) और UIView.transition(with: view) कुछ समय पहले का मूल्यांकन किया है और इस का उपयोग कर समाप्त हो गया: (लेकिन दुर्भाग्य से याद नहीं कर सकते क्यों)

guard let window = UIApplication.shared.keyWindow else { 
    return 
} 

guard let rootViewController = window.rootViewController else { 
    return 
} 

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let vc = storyboard.instantiateViewController(withIdentifier: "MainTabbar") 
vc.view.frame = rootViewController.view.frame 
vc.view.layoutIfNeeded() 

UIView.transition(with: window, duration: 0.3, options: .transitionCrossDissolve, animations: { 
    window.rootViewController = vc 
}, completion: { completed in 
    // maybe do something here 
}) 
+0

अच्छी तरह से किया था (वाई)। – Itzdsp

+0

धन्यवाद कि मेरी मदद करो –

1

इस प्रयास करें:

UIView.transition(from: appdelegate.window.rootViewController!.view, to: tabbar.view, duration: 0.6, options: [.transitionCrossDissolve], completion: { 
    _ in 
    appdelegate.window.rootViewController = tabbar 
}) 
2

इम स्वैप करने के लिए कोशिश कर रहा है एक अन्य रूट व्यू कंट्रोलर ... और मैं संक्रमण एनीमेशन

जोड़ना चाहता हूं 0

मेरे पास ऐसा ऐप है जो यह करता है: यह एनीमेशन के साथ रूट व्यू कंट्रोलर को बदलता है (इसे एल्बम कहा जाता है)।

लेकिन मेरा ऐप वास्तव में वास्तव में रूट व्यू कंट्रोलर को नहीं बदलता है। रूट व्यू कंट्रोलर कस्टम कंटेनर व्यू कंट्रोलर है जो कभी भी नहीं बदलता है। इसका विचार कभी नहीं देखा जाता है और इसमें कोई कार्यक्षमता नहीं है। इसका एकमात्र काम वह जगह है जहां परिवर्तन होता है: यह एक बच्चे के दृश्य नियंत्रक को दूसरे के लिए बदल देता है - और इस प्रकार संक्रमण एनीमेशन काम करता है।

दूसरे शब्दों में, आप पदानुक्रम के शीर्ष पर, अपने दृश्य नियंत्रक पदानुक्रम में एक दृश्य नियंत्रक जोड़ते हैं, और पूरी समस्या को अच्छी तरह से और सही ढंग से हल किया जाता है।

1

एक और वैकल्पिक समाधान

let rootVC = ViewControllers.getInstance.getMainTabBarController() 
    let snapshot = (UIApplication.shared.keyWindow?.snapshotView(afterScreenUpdates: true))! 
    rootVC.view.addSubview(snapshot); 

    UIApplication.shared.keyWindow?.rootViewController = rootVC; 
    UIView.transition(with: snapshot, duration: 0.4, options: .transitionCrossDissolve, animations: { 
     snapshot.layer.opacity = 0; 
    }, completion: { (status) in 
     snapshot.removeFromSuperview() 
    }) 
संबंधित मुद्दे