2011-08-27 19 views
5

मैं कोको में नया हूं और अनुभवी कोको -र्स से आवेदन के लिए थोड़ी सी सलाह ढूंढ रहा हूं।कोको ड्राइंग एप्लिकेशन के लिए सलाह

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

गर्म होने के लिए, मैंने एक मूल ड्राइंग ऐप लिखा है जो एक कस्टम NSView पर माउस द्वारा खींचे गए ऑब्जेक्ट्स (मंडल, आयताकार इत्यादि) बनाता है, वस्तुओं को NSArray संग्रह में जोड़ता है, और संग्रह में सामग्री की सामग्री को प्रस्तुत करता है। मैं इस नस में जारी रख सकता था, लेकिन मुझे सभी संबंधित प्रतिपादन के साथ ऑब्जेक्ट चयन का पता लगाने, जेड-इंडेक्सिंग को हल करने, फोकस हाइलाइटिंग, ड्रैग हैंडल इत्यादि का समर्थन करने के लिए समर्थन जोड़ना होगा। साथ ही, प्रत्येक चक्र पर प्रत्येक वस्तु को प्रतिपादित करना बहुत अप्रिय लगता है।

ऐसा लगता है कि लाइटवेट व्यू ऑब्जेक्ट्स को कैनवास पर छोड़ना बेहतर होता है जो स्वयं पर माउस ईवेंट का पता लगाने में सक्षम होते हैं, खुद को और उनके फोकस के छल्ले खींचते हैं, और आगे। हालांकि, NSView इन गुणों के साथ एक वस्तु की तरह प्रतीत होता है, मैं वेब पर बहुत सी चीज देखता हूं क्योंकि यह बहुत सामान के साथ हेवीवेट घटक है। मैंने NSCell एस पर ठोकर खाई है और उन पर पढ़ा है, लेकिन मुझे यकीन नहीं है कि वे सही विकल्प हैं या नहीं।

कोई सुझाव? यदि आप मुझे सही दिशा में घुमा सकते हैं तो मैं इसकी सराहना करता हूं।

+0

मैं निश्चित रूप से 'एनएससीएल' का उपयोग करने के खिलाफ सलाह दूंगा। यहां तक ​​कि 'एनएसटीबल व्यू' भी इसके नवीनतम पुनरावृत्ति में से दूर चले गए हैं। 'एनएससीएल' के साथ काम करने के लिए मजेदार नहीं है। –

+1

मैं भी * अत्यधिक * आपको स्केच उदाहरण को देखने की सलाह देता हूं (मुझे लगता है कि यदि आप दस्तावेज़ों को खोजते हैं तो वर्तमान में "स्केच + एक्सेसिबिलिटी" कहा जाता है) यदि आप पहले से नहीं हैं। वहां बहुत सारे अच्छे विचार हैं। –

उत्तर

3

अनुकूलन का पहला नियम: इसे पहले मत करें।

प्रति आकार एक कस्टम एनएसवी व्यू मेरे बारे में सही लगता है। चाहे आप विभिन्न आकारों के लिए अलग-अलग सबक्लास चाहते हैं, आप पर निर्भर होंगे; मैं एक सामान्य जेनेरिक आकृति-दृश्य वर्ग और आकृतियों को खुद को बेज़ीर पथ के रूप में वर्णित करने में सक्षम हूं, लेकिन इसे पकड़ने के बारे में बहुत सख्त न हो, अगर यह आसान हो जाए तो इसे बदल दें। बस इसे लागू करें हालांकि यह आपको समझ में आता है।

फिर, एक बार जब आप इसे काम कर लेंगे, तो इसे प्रोफाइल करें। जितना हो सके उतने आकार बनाएं। फिर और बनाओ। उच्च-पॉली-गिनती आकार। चौराहों। भरता है, स्ट्रोक, छाया, और ग्रेडियेंट। आपको शायद प्रत्येक तनाव के लिए एक अलग दस्तावेज़ बनाना चाहिए। बस उपयोगकर्ता स्तर पर ध्यान दें जो धीमा है। फिर, अपने ऐप को इंस्ट्रूमेंट्स के तहत चलाएं और देखें कि यह धीमा क्यों है।

शायद विचार गलत समाधान के रूप में सामने आएंगे। CALayers में देखने के लिए मत भूलना। लेकिन जब तक आपने इसे आजमाया नहीं है और इसे माप लिया है, तब तक धीमी गति से कुछ भी नकारें।

+0

ठीक है, सभी सामान्य उपयोग के मामले पर निर्भर करते हैं - यदि ऐप से आमतौर पर हजारों ऑब्जेक्ट्स को संभालने की अपेक्षा की जाती है तो मैं हजारों एनएसवीव उदाहरणों का उपयोग करने से दूर रहना चाहता हूं और एक अलग डिज़ाइन का चयन कर सकता हूं। – Jay