2016-04-07 8 views
6

मैं कुछ नए आईओएस प्रोग्रामिंग पैटर्न सीखने की कोशिश कर रहा हूं। मैंने आईओएस 7 में जोड़े गए UIViewController संक्रमण API के बारे में एक गुच्छा पढ़ा है। वे अच्छे लगते हैं लेकिन एक आसान काम की तरह दिखने के लिए बहुत भारी महसूस करते हैं।UIViewController संक्रमणों के मान को समझना

इस उपयोग के मामले पर विचार करें: मेरे पास एक कस्टम कंटेनर व्यू नियंत्रक है जो "स्लाइड" प्रबंधित करता है। इसमें स्लाइड व्यू कंट्रोलर की एक सरणी है और उपयोगकर्ता बटन को टैप करके आगे और पिछड़े स्थानांतरित कर सकते हैं।

private func transitionToViewController(viewController: UIViewController, direction: TransitionDirection = .Forward, animated: Bool = true) { 
    currentViewController.willMove(toParentViewController: nil) 
    addChildViewController(viewController) 
    // ... set up frames, other animation prep ... 
    contentContainerView.addSubview(comingView) 
    UIView.animate(duration: 0.5, animations: { 
     // do the animations 
    }) { (finished) in 
     leavingView.removeFromSuperview() 
     self.currentViewController.removeFromParentViewController() 
     viewController.didMove(toParentViewController: self) 
     // final clean up 
    } 
} 

नए संक्रमण एपीआई यह कैसे सुधार होगा:

मैं इस प्रकार इस के लिए संक्रमण को लागू कर सकते हैं? मैं क्या समझ से, इन API और भी जटिल आप अपने खुद के कंटेनर दृश्य नियंत्रकों लिए ला रहे हैं, तो उपयोग करने के लिए कर रहे हैं (देखें custom-container view controller transitions

संक्रमण APIs में मूल्य इंटरैक्टिव बदलाव के लिए ज्यादातर है?

स्पष्ट करने के लिए धन्यवाद

उत्तर

7

मुझे लगता है कि नए संक्रमण एपीआई (UIViewControllerTransitioningDelegate और दोस्तों) बस नियंत्रकों के बीच दृश्य संक्रमण का सामान्यीकरण में एक अंतिम कदम है।

हम hack the system transition code पड़ा UIKit के पहले संस्करण किसी भी कस्टम संक्रमण प्राप्त करने के लिए बिलकुल। सालों बाद हमें नियंत्रक की रोकथाम मिली जिसने दृश्य नियंत्रकों को प्रथम श्रेणी के नागरिकों और create our own interactive transitions के रूप में प्रबंधित करना संभव बना दिया। अंतिम चरण में किसी भी संक्रमण के लिए पूर्ण-विशेषीकृत सामान्य सिस्टम एपीआई है जिसका आप सपना देख सकते हैं - यह नया संक्रमण API है।

नई एपीआई स्टैंडअलोन कक्षाओं में संक्रमण को निकालने के लिए संभव बनाता है। जो बदले में, अंततः गिटहब से एक संक्रमण लाइब्रेरी डाउनलोड करने और इसे एक सरल संक्रमण प्रतिनिधि के रूप में अपने मौजूदा कोड में प्लग करने के लिए संभव बनाता है। किसी विशेष सुपरक्लास से अपने व्यू कंट्रोलर को प्राप्त करने की आवश्यकता नहीं है, किसी तृतीय-पक्ष नियंत्रक कंटेनर का उपयोग करने की आवश्यकता नहीं है, UIKit कक्षाओं में एक्सटेंशन जोड़ने की आवश्यकता नहीं है। अब यूआईकिट में संक्रमण अंततः प्रथम श्रेणी के नागरिक भी हैं।

+0

मैं मानता हूं कि इसमें कई अलग-अलग वर्ग शामिल हैं और पहली नज़र में एपीआई चुनौतीपूर्ण लग रहा है। हालांकि, ऐप्पल के दस्तावेज में सभी बास शामिल हैं और कोड की राशि आपको उन वर्गों में से प्रत्येक के लिए लिखने के लिए लिखनी होगी (कहें) 'यूआईएलर्ट कंट्रोलर' के व्यवहार को दोहराने के लिए बहुत कुछ नहीं है। –

2

नए संक्रमण API कैसे सुधारेंगे?

टी एल; Encapsulation, Reusability, Testability के माध्यम से डॉ अनुरक्षणीयता।

Encapsulation: टिप्पणियां इंगित करती हैं कि एनीमेशन के साथ ट्रैक करने और स्थापित करने के लिए तर्क है। आपका व्यू कंट्रोलर शायद पहले से काफी बड़ा है; कहीं भी संक्रमण तर्क डालने से प्रत्येक टुकड़ा छोटा होता है और इसलिए अधिक रखरखाव होता है।

पुन: प्रयोज्यता: इसके बाद आप क्या करेंगे अगली बात क्या है? संक्रमित से नियंत्रक से संक्रमण को वापस सेट करें, इसमें कोई संदेह नहीं है। और क्या यह इस एनीमेशन का उलटा होने की संभावना है? बहुत संभावना है। तो आप इस कोड को उस कंट्रोलर पर कॉपी और पेस्ट करेंगे और शायद इसे उलट दें। अब आपके पास दो प्रतियां हैं। संक्रमण का उपयोग कर एक प्रति अधिक रखरखाव होगी। (इसके अलावा कस्टम संक्रमण के फली के अस्तित्व ध्यान दें, के रूप में पुनरुपयोग की क्षमता और shareability हाथ में हाथ जाओ।)

Testability: कोड एक दिग्गज दृश्य नियंत्रक में एम्बेडेड परीक्षण करने के लिए बेहद मुश्किल है।लाइव दृश्यों के राज्य ओवरहेड के बिना अलगाव में एक कस्टम संक्रमण का परीक्षण किया जा सकता है।

तो किसी भी कोड के लिए आप एक से अधिक बार देखना चाहते हैं, संक्रमणशील एपीआई शायद प्रयास के लायक हैं!

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