在drawLayer:inContext中更新自定义CALayer的边界:

时间:2012-04-16 17:01:01

标签: ios calayer layer quartz-2d

我有一个自定义图层,它是其他内容的子图层。问题是,在我进入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));
}

那么如何动态改变我的界限并仍然让我的内容出现?

我尝试设置一个持续时间为0的CATransaction,但这没有做任何事情。

1 个答案:

答案 0 :(得分:0)

您是否尝试在更新帧/边界后调用setNeedsDisplay

因此,例如,如果您有CALayer名为layer,则可以尝试以下操作:

layer.frame = CGRectMake(20, 40, 100, 300);
// tell the layer that it needs to refreshed
[layer setNeedsDisplay];