2

obj2 が obj1 とブレンドされないのに、CGLayer を使用しないと正常に動作するのはなぜですか? CGContextDrawLayerAtPoint と同じ問題があります。

    //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);
4

1 に答える 1

2

レイヤーのコンテキスト内でのみブレンドモードを設定しているため、画像はソフトライトブレンドモードで透明な背景の上にレンダリングされます(通常のブレンドモードでレンダリングするのと同じ効果があると思います)。

のブレンド モードcontextはまだ通常に設定されているため、(既にレンダリングされている) レイヤーはそのモードでレンダリングされます。ブレンド モードは、コンテキストの境界を越えません。

于 2012-05-02T13:35:30.377 に答える