0

他のもののサブレイヤーであるカスタムレイヤーがあります。問題は、私のレイヤーは、私が入るまでそのサイズを知ることができないということですdrawLayer:inContext:.

レイヤーの境界/フレームを変更しないと、すべてが完全に描画されます。

フレーム/境界を変更する行を追加すると、背景は完璧に見えますが、コンテンツが存在しません。コンテンツが新しい (より大きな) 境界ではなく元の境界を切り取っているように見えるため、背景しか見えません。

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)context {   
    CGFloat initialGraphContentsWidth = graph.frame.size.width - graph.leftMargin;
    CGFloat initialGraphContentsHeight = graph.frame.size.height - graph.bottomMargin - graphHelper.topMargin;

    self.frame = CGRectMake(0, 0, initialGraphContentsWidth, initialGraphContentsHeight);
    self.position = CGPointMake(graphHelper.leftMargin + 1, graphHelper.topMargin + 1);
    self.backgroundColor = [UIColor greenColor].CGColor;

    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextAddRect(context, CGRectMake(0, 0, 20, 20));
}

では、境界を動的に変更してもコンテンツを表示するにはどうすればよいでしょうか?

CATransactionデュレーションを 0 に設定しようとしましたが、何もしませんでした。

4

1 に答える 1

0

フレーム/境界を更新した後に呼び出しsetNeedsDisplayてみましたか?

したがって、たとえば、CALayer呼び出された場合layer、次のことを試すことができます。

layer.frame = CGRectMake(20, 40, 100, 300);
// tell the layer that it needs to refreshed
[layer setNeedsDisplay];
于 2012-04-22T07:49:05.993 に答える