composite colors: CALayer and blend mode on iPhone

前端 未结 3 661
太阳男子
太阳男子 2020-12-01 10:21

I\'m trying to use core image on the iphone. I\'m able to composite my colors using quartz to draw an uiview, but I want to separate each component into CALayer

相关标签:
3条回答
  • 2020-12-01 10:29

    I managed to get the affect of compositing multiple CALayers by drawing them directly into a UIView's graphics context.

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

    BTW, I did not add the layers as sublayers of the view's layer (that is I never called [myView.layer addSublayer:myLayer])

    0 讨论(0)
  • 2020-12-01 10:29

    This method seems not to be a flaw of Core Animation, because the layers are prerendered into image contexts. Core Image is used for real time filtering (during animation and whatnot) of these images against background layers and their images. So the compositing properties of CALayer are used for this ability, which are not available on iPhone/iOS (yet) due to the requirement of Core Image.

    OpenGL can do this for us in our situation, however =)

    edit(add): setting the blend mode with CGContext in -drawInContext: and -drawLayer:inContext: does of course still have effect with what was already rendered or present in the image of that context. (when it is set before anything was rendered in the context('s image), it is the effect of blending against either full Black or full White (i am not sure which=)

    0 讨论(0)
  • 2020-12-01 10:40

    Not at all... I think this is easier to use opengl to achieve this, because it seems to be not yet implemented in CA.

    0 讨论(0)
提交回复
热议问题