2010-03-17 6 views
7

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

यहां एक नमूना है:

alt text

कार्ड है कि सीधे रखी हैं बहुत साफ हैं, लेकिन जब भी वे कर रहे हैं angled कार्ड के चारों ओर काले लाइनों दांतेदार मिलता है। मैंने को आर्टवर्क और लाइनों के लिए खींचा गया रेखाओं के आधार पर दोनों पंक्तियों के आधार पर प्रयास किया है, और वे दोनों एक ही काम करते हैं। मैंने एज एन्टीअलीसिंगमास्क की कोशिश की है और यह एक चीज नहीं करता है जहां तक ​​मैं कह सकता हूं। मैंने sublayers के लिए मास्क टॉबाउंड्स को NO और YES पर सेट करने का प्रयास किया है।

अभी मेरा कार्ड एक CALayer है कि आगे और पीछे के लिए उप CALayers रूप में सेट है, के साथ साथ एक बिजली की तरह कुछ अन्य बातों के लिए और एक काला नकाब मुखौटा।

CArdLayer *theCardLayer = [CArdLayer layer]; 
    theCardLayer.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge; 

    theCardLayer.front = [CALayer layer]; 
    theCardLayer.front.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge; 
    theCardLayer.front.bounds = theCardLayer.bounds; 
    theCardLayer.front.masksToBounds = YES; 
    theCardLayer.front.contents = (id)[cardDrawing CGImage]; 

    [theCardLayer addSublayer:theCardLayer.front]; 

आदि ...

कैसे कार्ड वास्तव में विरोधी उर्फ ​​बनाने के लिए पर कोई भी विचार: यहाँ कोड के कुछ स्निपेट है?

+0

यह सवाल समान है: http://stackoverflow.com/questions/1136110/any-quick-and-dirty-anti-aliasing-techniques -for-a-rotated-uiimageview (प्रश्न UIImageView को संदर्भित करता है, लेकिन सुझाए गए फ़िक्स सभी कोरएनीमेशन परतों के लिए काम करते हैं)। प्रतिक्रिया के लिए –

उत्तर

3

सबसे अच्छा परिणाम जो मैं साथ आया था, जो मैंने सुझाया था टिप्पणी: मैंने प्रत्येक तरफ 1 पिक्सेल द्वारा प्रत्येक (पारदर्शी) ग्राफ़िक बढ़ाया। मार्जिन के उस छोटे से हिस्से के साथ, कार्ड पृष्ठभूमि के साथ बहुत बेहतर मिश्रित थे।

तो, बिल्कुल एक आईफोन कोड जवाब नहीं, लेकिन एक ऐसा जो आईफोन पर काम करता है। alt text

+0

हाय शैनन, आपने प्रत्येक तरफ एक पारदर्शी पिक्सेल द्वारा स्ट्रोक का विस्तार कैसे किया? क्या आप कोड स्निपेट साझा कर सकते हैं? धन्यवाद। –

+0

फ़ोटोशॉप। मैंने वहां प्रत्येक फाइल खोली और दोनों दिशाओं में कैनवास आकार को 2 पिक्सल तक बढ़ा दिया। –

1

मैंने कभी भी ढांचे का उपयोग नहीं किया, लेकिन ऐसा लगता है कि कार्ड के भीतरी हिस्से पर केवल एंटी-एलियासिंग काम करता है, न कि बाहरी तरफ (गैर-घुमावदार कार्ड पर गोलाकार कोनों को एक विशेष मामला माना जाता है)।

तो IMHO यह वास्तव में संरचना समस्या कार्ड और पृष्ठभूमि की समस्या है।

यकीन Opaque संपत्ति गलत है (हो सकता है जो आप देखते प्रतिपादन कोड की एक अनुकूलन का परिणाम है) बनाओ:

the docs के लिए एक त्वरित दृश्य कुछ संकेत (केवल मान्यताओं, उन्हें कोशिश) प्रदान करता है।

यह जांचें कि क्या आप ओपेसिटी को "अपारदर्शी के पास" (शायद 0.9?) पर सेट करते हैं।

Mask संपत्ति की जांच करें। यह आपको मुलायम सीमाओं के साथ अल्फा चैनल की तरह एक मुखौटा बनाने की अनुमति दे सकता है - हालांकि मुझे पता नहीं है कि आप वास्तव में क्या चाहते हैं ...

+0

धन्यवाद। न तो अपारदर्शी या अस्पष्टता संपत्ति कोई फर्क पड़ता है। हालांकि, मैंने आपके बयान पर लेटा था कि एंटी-एलियासिंग केवल कार्ड के भीतरी हिस्से पर काम करता है। इस प्रकार मैंने प्रत्येक कार्ड पर एक (पारदर्शी) पिक्सेल द्वारा अपने कार्डों में से एक का विस्तार करने की कोशिश की। नतीजा यह है कि स्ट्रोक (जो वर्तमान में वास्तविक कार्ड ग्राफिक में हैं) बहुत नरम हैं। तो, यह एक समाधान की तरह दिखता है, लेकिन प्रत्येक ग्राफ़िक 2x2 पिक्सल को बड़ा लगता है, इसकी तुलना में मुझे लगता है कि किसी को भी ऐसा करने से पहले कोई विचार है? –

1

आप फ़ोटोशॉप ऊपर आग नहीं करना चाहते हैं, तो यहाँ एक तरीका है कि आप इसे प्रोग्राम के रूप में क्या कर सकते हैं:

यहाँ एक शॉट है कि आप करने के लिए "से पहले" तुलना कर सकते हैं, ऊपर "के बाद" है

http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

विशेष रूप

-transparentBorderImage: UIImage + Alpha.h/मीटर श्रेणी में विधि।

आशा है कि इससे दूसरों को वहां मदद मिलेगी।

धन्यवाद http://vocaro.com/trevor/blog!

4

यह एक पारदर्शी सीमा को जोड़ने का प्रभाव पड़ता है:

layer.cornerRadius = 1.01; 

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

  • कोई संबंधित समस्या नहीं^_^