2009-11-01 14 views
6

मैं आईफोन पर कोर छवि का उपयोग करने की कोशिश कर रहा हूं। मैं uiview खींचने के लिए क्वार्ट्ज का उपयोग करके अपने रंगों को मिश्रित करने में सक्षम हूं, लेकिन मैं प्रत्येक घटक को CALayer (UIview अधिक संसाधनों का उपभोग) में अलग करना चाहता हूं।समग्र रंग: आईफोन पर कैलियर और मिश्रण मोड

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

@implementation WhiteLayerHelper 

    - (void)drawLayer:(CALayer *)theLayer 
      inContext:(CGContextRef)myContext 
    { 
     // draw a white overlay, with special blending and alpha values, so that the saturation can be animated 
     CGContextSetBlendMode(myContext,kCGBlendModeSaturation); 
     CGContextSetRGBFillColor(myContext,1.0,1.0,1.0,0.9); 
     CGContextFillRect(myContext,[UIScreen mainScreen].bounds); 

    } 

@end 

और मुख्य दृश्य drawrect कोड है, जहां मैं अपने CALayer का उपयोग करें::

यहाँ मेरी कोड है

- (void)drawRect:(CGRect)rect { 
    //get the drawing context 
    CGContextRef myContext = UIGraphicsGetCurrentContext(); 
    // draw the background 
    [self fillContext:myContext withBounds:m_overlayRect withImage:m_currentImage]; 
    [whiteLayer renderInContext:myContext]; 

} 

वहाँ कुछ गलत है?

उत्तर

1

बिलकुल नहीं ... मुझे लगता है कि इसे प्राप्त करने के लिए ओपनग्ल का उपयोग करना आसान है, क्योंकि ऐसा लगता है कि यह अभी तक सीए में लागू नहीं हुआ है।

3

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

ओपन हमारे स्थिति में हमारे लिए ऐसा कर सकते हैं हालांकि, =)

संपादित करें (जोड़ने): और -drawLayer: InContext: -drawInContext में CGContext के साथ मिश्रण मोड की स्थापना अभी भी साथ प्रभाव है निश्चित रूप से पड़ता कि उस संदर्भ की छवि में पहले से ही प्रस्तुत या प्रस्तुत किया गया था। (जब यह संदर्भ (छवि की छवि) में कुछ भी प्रस्तुत किया गया था, तो यह पूर्ण काला या पूर्ण सफेद के खिलाफ मिश्रण का प्रभाव है (मुझे यकीन नहीं है कि कौन सा =)

+1

कोरइमेज अब आईओएस पर उपलब्ध नहीं है? – openfrog

+1

@ ओपनफोग हां लेकिन यह ओएस एक्स की तुलना में सीमित है। उदाहरण के लिए ओएस एक्स कैलियर पर कंपोजिटिंग फिल्ट हो सकती है रु। आईओएस पर, इतना नहीं। –

7

मुझे प्रभावित होने में कामयाब रहा । BTW उन्हें एक UIView के ग्राफिक्स संदर्भ में सीधे बनाकर कई CALayers संयोजन

-(void)drawRect:(CGRect)rect { 
CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextSetBlendMode(c, kCGBlendModeDifference); 
[myLayer drawInContext:c]; 
} 

, मैं दृश्य की परत की sublayers के रूप में परतों को जोड़ने नहीं था (कि मैं कभी नहीं कहा जाता है [myView.layer addSublayer: myLayer])

+5

यदि आप कैलेयर प्रतिनिधि फ़ंक्शन को कार्यान्वित नहीं कर रहे हैं "- (शून्य) drawLayer: (CALayer *) परत में कॉन्टेक्स्ट: (CGContextRef) संदर्भ", आपको [mylayer renderInContext: c] का उपयोग करना चाहिए – jkr

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