मैं आईपैड पर कस्टम दस्तावेज़ प्रारूप के लिए हाइलाइटिंग/एनोटेशन क्षमताओं के साथ एक दस्तावेज़ दर्शक को कार्यान्वित कर रहा हूं। दस्तावेज लंबे समय तक हैं (100 से 200 पेज, यदि पेपर पर मुद्रित हैं) और मुझे सही दृष्टिकोण खोजने में मुश्किल हो रही है। यहां आवश्यकताएं हैं:आईपैड पर एक लंबे दस्तावेज़ को प्रस्तुत करना
1) मूल समृद्ध-पाठ स्टाइल: बाएं/दाएं मार्जिन का नियंत्रण। फ़ॉन्ट नाम, आकार, अग्रभूमि/पृष्ठभूमि रंग, और लाइन दूरी का नियंत्रण। बोल्ड, इटालिक्स, अंडरलाइन, आदि
2) मनमानी पाठ क्षेत्रों का चयन और हाइलाइटिंग (पैराग्राफ सीमाओं तक सीमित नहीं है, जैसे सफारी/UIWebView में)।
3) कट/कॉपी/पेस्ट पॉपअप (UIMenuController) का अनुकूलन यह ऐप की आवश्यक आवश्यकताओं में से एक है।
मेरा पहला कार्यान्वयन UIWebView पर आधारित था। मैंने पाठ स्टाइल के लिए सीएसएस के साथ एचटीएमएल के रूप में दस्तावेज प्रस्तुत किया। लेकिन मुझे उस प्रकार का टेक्स्ट चयन व्यवहार नहीं मिला जो मैं चाहता था (पैराग्राफ सीमाओं में) और UIMenuController को UIWebView के भीतर से अनुकूलित नहीं किया जा सकता है।
इसलिए मैंने जावास्क्रिप्ट दृष्टिकोण पर काम करना शुरू कर दिया, JQuery का उपयोग करके jQuery टेक्स्ट का चयन करने के लिए डिवाइस टेक्स्ट-चयन व्यवहार को फिक्र करना और टेक्स्ट के चयनित क्षेत्रों के पृष्ठभूमि रंग को बदलने के लिए गतिशील रूप से डोम को संशोधित करना। मैंने एक छिपी हुई डीआईवी के रूप में एक नकली यूआईएमएनयू कंट्रोलर नियंत्रण बनाया, इसे स्थितिबद्ध किया और सक्रिय चयन क्षेत्र होने पर इसे अनदेखा कर दिया।
बहुत शर्मीली नहीं है।
मुख्य समस्या यह है कि यह SLOOOOOOOW है। दस्तावेज़ के माध्यम से स्क्रॉल करना अच्छा और तेज़ है, लेकिन गतिशील रूप से डीओएम को बदलना बहुत नाराज नहीं है। इसके अलावा, मैं यह नहीं समझ सका कि आवर्धक लूप को फिर से कैसे बनाया जाए, इसलिए मेरा नकली टेक्स्ट-चयन जीयूआई मूल कार्यान्वयन के समान नहीं दिखता है। इसके अलावा, मैंने अभी तक जावास्क्रिप्ट परत और उद्देश्य-सी परत (जहां शेष ऐप रहता है) के बीच संचार पुल लागू नहीं किया है, लेकिन यह एक बड़ी परेशानी के लिए आकार दे रहा था।
तो मैं कोरटेक्स्ट को देख रहा हूं, लेकिन वेब पर अनमोल कुछ उदाहरण हैं। मैं इस सरल छोटे डेमो के साथ एक छोटे से समय बिताया:
http://github.com/jonasschnelli/I7CoreTextExample/
इससे पता चलता है CoreText उपयोग करने के लिए कैसे एक UIView में एक NSAttributedText स्ट्रिंग आकर्षित करने के लिए। लेकिन इसकी अपनी समस्याएं हैं: यह टेक्स्ट-चयन व्यवहार को लागू नहीं करती है, और यह UIMenuController प्रस्तुत नहीं करती है, इसलिए मुझे यह नहीं पता कि ऐसा कैसे किया जाए। और, सबसे महत्वपूर्ण बात यह है कि लंबे दस्तावेज़ों के लिए महत्वपूर्ण प्रदर्शन में गिरावट के साथ, यह पूरे दस्तावेज़ को एक साथ में खींचने की कोशिश करता है। मेरे दस्तावेज़ों में हजारों पैराग्राफ हो सकते हैं, और एक समय में दस्तावेज़ का 1% से भी कम स्क्रीन पर स्क्रीन पर हो सकता है।
प्लस तरफ, इन दस्तावेज़ों में पहले से ही सटीक स्वरूपण जानकारी है। मुझे पाठ की प्रत्येक पंक्ति की सटीक पृष्ठ-स्थिति पता है, इसलिए मुझे लेआउट इंजन की आवश्यकता नहीं है।
क्या कोई जानता है कि CoreText का उपयोग करके इस तरह के दृश्य को कैसे कार्यान्वित किया जाए? मैं समझता हूँ कि इस तरह की एक प्रश्न के लिए overkill है कि एक पूर्ण कार्यान्वयन, लेकिन मैं कुछ बुनियादी आवश्यकताओं के साथ एक अच्छा CoreText उदाहरण के लिए देख रहा हूँ:
1) सटीक लेआउट & नियंत्रण स्वरूपण (स्वरूपण मैट्रिक्स और पाठ का उपयोग शैलियों मैं पहले से ही गणना की है)।
2) पाठ के मनमाने ढंग से चयन।
3) UIMenuController का अनुकूलन।
4) ऑफ़-स्क्रीन ऑब्जेक्ट्स के लिए संसाधनों का कुशल रीसाइक्लिंग।
टेक्स्ट तत्वों को ऑफ-स्क्रीन स्क्रॉल करते समय मुझे अपने स्वयं के रीसाइक्लिंग को लागू करने में खुशी होगी, लेकिन क्या आपको UIScrollView को फिर से कार्यान्वित करने की आवश्यकता नहीं होगी?
मैं आईफोन विकास के लिए नया हूं, और अभी भी उद्देश्य-सी में उपयोग किया जा रहा है, लेकिन मैं दस से अधिक वर्षों से अन्य भाषाओं (जावा, सी #, फ्लेक्स/एक्शनस्क्रिप्ट, आदि) में काम कर रहा हूं, इसलिए मुझे काम पूरा करने की मेरी क्षमता में आत्मविश्वास महसूस होता है, अगर केवल आईफोन एसडीके और इस तरह की चीजों के लिए सामान्य कोडिंग पैटर्न के लिए मुझे बेहतर महसूस होता। क्या यह सिर्फ मुझे है, या एसडीके दस्तावेज वास्तव में चूसना है?
किसी भी तरह, आपकी मदद के लिए धन्यवाद!
मैं SDK दस्तावेज़ बहुत अच्छा लगता है। आप बस उस क्षेत्र में काम कर रहे प्रतीत होते हैं जहां इस समय एसडीके थोड़ा कमजोर है। – zoul
एसडीके दस्तावेज पूर्व-मौजूदा घटकों के समूह को एक साथ जोड़कर ऐप्स बनाने के लिए बहुत अच्छा है। लेकिन कस्टम घटकों के विकास के लिए आवश्यक तकनीकों के दस्तावेज़ीकरण में मेरी कमी है। – benjismith
@benjismith हैलो, मैं भी इस तरह की एक एप्लिकेशन पर काम कर रहा हूँ। मुझे एक एपब फ़ाइल को पार्स करने की ज़रूरत है। क्या आपको इसके बारे में कोई विचार है? आपने पेजिंग कैसे की थी? मेरे पास एकाधिक एक्सएचटीएमएल पेज हैं, मैं यह समझने में असमर्थ हूं कि मैं पेजिंग कैसे करूं? आपकी मदद से सराहना की जाएगी। धन्यवाद –