2012-03-19 20 views
7

में पथ/आकार का बेवलिंग मैं कोर ग्राफिक्स में बेवल पथ की कोशिश कर रहा हूं। क्या किसी ने इसे पहले से ही मनमाने ढंग से आकार के लिए किया है और यदि ऐसा है तो वे कोड साझा करने के इच्छुक हैं?कोर ग्राफिक्स

मैंने नीचे अपना कार्यान्वयन शामिल किया है। मैं बेवल को निर्धारित करने के लिए तीन चर का उपयोग करता हूं: CGFloat bevelSize, UIColor highlightColor, UIColor shadow। ध्यान दें कि प्रकाश स्रोत का कोण हमेशा 135 डिग्री होता है। मैंने अभी तक इसे लागू नहीं किया है, लेकिन यहां अनिवार्य रूप से मैं जो करने की कोशिश कर रहा हूं, दो भागों में विभाजित है। भाग एक, फोकल पॉइंट जेनरेट करें:

  1. मुझे पथ में प्रत्येक आसन्न रेखाओं के बीच कोणों के लिए द्विभाजक मिलते हैं।
  2. आर्क के लिए, द्विभाजक रेखा के दो अंत बिंदुओं द्वारा बनाई गई रेखा के लंबवत रेखा है, जो मध्य बिंदु से उत्पन्न होता है। यह उन स्थितियों की देखभाल करनी चाहिए जिनमें एक चाप का उपयोग किया जाता है। मैं एक चाप और एक रेखा के द्विभाजक नहीं लेता। आर्क द्विभाजक को उन मामलों में ठीक काम करना चाहिए।
  3. मैं फिर प्रत्येक आसन्न द्विभाजक के चौराहे के आधार पर फोकल पॉइंट की गणना करता हूं।
  4. यदि फोकल बिंदु आकार के भीतर है तो इसका उपयोग किया जाता है, अन्यथा इसे छोड़ दिया जाता है।

फोकल पॉइंट्स उत्पन्न करने का उद्देश्य आनुपातिक रूप से आकार को 'संक्षिप्त' करना है।

दूसरा भाग थोड़ा और जटिल है। मैं आवश्यक रूप से bevelled आकार के प्रत्येक पक्ष/खंड बनाते हैं। मैं 'इन' (bevelSize द्वारा) रेखा के त्रिज्या के साथ मूल आकार के प्रत्येक बिंदु को खींचकर ऐसा करता हूं जो निकटतम फोकल बिंदु से प्रश्न के बिंदु तक फैला हुआ है। जब मेरे पास लगातार दो 'बेवल पॉइंट्स' होते हैं, तो मैं एक UIBezierPath बना देता हूं जो बेवल पॉइंट्स से मूल बिंदुओं तक और बेवल पॉइंट्स पर ध्यान देता है (नोट, इसमें आर्क शामिल हैं)। यह एक 'साइड/सेगमेंट' बनाता है जिसे मैं भरने के लिए उपयोग कर सकता हूं। सीधे तरफ, मैं बस किनारे के कोण के आधार पर छाया या हाइलाइट रंग भरता हूं। आर्क के लिए, मैं रेडियन 'आर्क' निर्धारित करता हूं। यदि उस चाप में एक संक्रमण कोण (M_PI_4 या M_PI + M_PI_4) होता है, तो मैं इसे ढाल के साथ भरता हूं (छाया से हाइलाइट करने या छाया पर हाइलाइट करने के लिए, जो कभी भी उपयुक्त है)। अन्यथा मैं इसे एक ठोस रंग से भरता हूं।

अद्यतन

मैं (नीचे देखें) मेरा उत्तर बाहर विभाजित कर दिया है एक अलग ब्लॉग पोस्ट में। मैं अब ऊपर देखे गए कार्यान्वयन विवरण का उपयोग नहीं कर रहा हूं लेकिन मैं इसे संदर्भ के लिए वहां रख रहा हूं। मुझे आशा है कि यह कोर ग्राफिक्स का उपयोग करने वाले किसी और की मदद करेगा।

+0

प्रश्न लंबा है और इसमें बहुत सारे विवरण शामिल हैं। क्या आप इसे सरल बना सकते हैं? –

+0

क्रमबद्ध करें। प्रश्न का पहला भाग मुख्य प्रश्न है: क्या किसी को कोर-ग्राफिक्स में मनमाने ढंग से आकार देने का तरीका पता है? बाकी सिर्फ यह बता रहा है कि मैंने खुद को बेवलिंग कैसे किया (जिसे मैंने अभी समाप्त कर लिया है)। यह काफी कुछ आकारों पर ठीक काम करता है (लेकिन सभी नहीं)। अगर किसी के पास कोई तरीका है तो मैं प्रश्न खोल रहा हूं। –

+0

मैं अपने समाधान को पोस्ट करने पर विचार करता हूं, लेकिन यह कोड की लगभग 400 लाइनें है ... पोस्ट करने के लिए बहुत कुछ लगता है। –

उत्तर

3

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

अद्यतन

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

मैं समझाता कोड और इस प्रक्रिया मैं यहाँ उठाव के लिए इस्तेमाल किया: Github : CGPathBevel: Beveling Shapes In Core Graphics

यहाँ कोड है।

कोड सही नहीं है: मैं सुझाव/सुधार/चीजों को करने के बेहतर तरीके के लिए खुला हूं।

+0

आलेख शानदार दिखता है। मुझे जल्द ही इसे आजमा देना होगा। धन्यवाद! +1 –