3

これらの両方を同じ UIView で正しく使用するにはどうすればよいですか?

drawInContext 内にパターンを描画するカスタム サブクラス化された CALayer が 1 つあります。

オーバーレイPNG画像をコンテンツとして設定した別のものがあります。

私はちょうど背景である 3 分の 1 を持っています。

これら 3 つのアイテムすべてをオーバーレイするにはどうすればよいですか?

[self.layer addSublayer:bottomLayer];    // this line is the problem

[squaresLayer drawInContext:viewContext];
[self.layer addSublayer:imgLayer];

他の 2 つは、この順序で実行すると、正しく描画されます。どこにbottomLayerを配置しようとしても、常にsquaresLayerの描画が妨げられます。3 つのレイヤーが必要な理由は、背景レイヤーとカスタム レイヤーの色をアニメーション化するためです。最上層は単なるグラフィック オーバーレイです。

4

1 に答える 1

1

誰かが独自の内部描画ルーチンを持つスタックされた CALayer をアニメーション化しようとしている場合に備えて、コードを貼り付けることもできます

- (void)drawRect:(CGRect)rect {

    [imgLayer removeFromSuperlayer];

    CGFloat w = [self.blockViewDelegate w];
    CGFloat h = [self.blockViewDelegate h];

    CGFloat wb = w/4;
    CGFloat hb = h/4;

    CGContextRef viewContext = UIGraphicsGetCurrentContext();

    // Layers

    [bottomLayer sizes:wb :hb :1];
    bottomLayer.frame = CGRectMake(0, 0, w, h);
    bottomLayer.opaque = NO;

    [topLayer sizes:wb :hb :0];
    topLayer.frame = CGRectMake(0, 0, w, h);
    topLayer.opaque = NO;

    // Overlay

    imgLayer.frame = CGRectMake(0, 0, w, h);
    imgLayer.opaque = NO;
    imgLayer.opacity = 1.0f;

    UIImage *overlay = [self.blockViewDelegate image];
    CGImageRef img = overlay.CGImage;
    imgLayer.contents = (id)img;

    // Add layers

    [bottomLayer drawInContext:viewContext];
    [topLayer drawInContext:viewContext];
    [self.layer addSublayer:imgLayer];

}

blockViewDelegate は、幅、高さ、および画像情報を格納する場所であり、この UIView のコントローラーです。

topLayer と bottomLayer はカスタム UIView サブクラスであり、可変色情報でビューにいくつかの形状を描画します。アニメーションの後半で、タイマーを使用して「setNeedsDisplay」を繰り返し実行すると、このルーチンが繰り返され、更新されたパラメーターを使用してレイヤーが再描画されます。

于 2009-08-01T22:48:53.967 に答える