为什么CGLayers没有混合?

时间:2012-05-02 11:13:21

标签: objective-c cocoa-touch drawrect cgcontext cglayer

为什么obj2没有与obj1混合但没有使用CGLayer它工作正常,与CGContextDrawLayerAtPoint相同的问题,CGLayer不支持CGContextSetBlendMode吗?

    //Layer
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGLayerRef objectLayer = CGLayerCreateWithContext (context, rect.size, NULL);
    CGContextRef objectContext = CGLayerGetContext (objectLayer);
    //obj1
    CGContextDrawImage(objectContext, CGRectMake(0, 0, rect.size.width, rect.size.height), [[UIImage imageNamed:@"background.png"] CGImage]);
    //obj2
    CGContextSetBlendMode(objectContext, kCGBlendModeSoftLight);
    CGContextSetAlpha(objectContext, 0.5f);
    CGContextDrawImage(objectContext, CGRectMake(0, 0, rect.size.width, rect.size.height), [[UIImage imageNamed:@"overlay1.png"] CGImage]);
    CGContextDrawLayerInRect(context, rect, objectLayer);

1 个答案:

答案 0 :(得分:2)

您只在图层的上下文中设置混合模式,因此图像在柔和的光线混合模式下呈现在透明背景的顶部(我认为它与渲染效果相同)它采用普通混合模式)。

context的混合模式仍设置为法线,因此将使用该模式渲染图层(已经渲染)。混合模式不跨越上下文边界。