为什么我的CGContext被限制为边界?

时间:2010-08-07 20:24:17

标签: iphone ipad quartz-2d

我应该能够覆盖drawInContext()并在我的CALayer范围之外绘制吗?即使我的图层的maskToBounds设置为NO(默认值),我的drawInContext()也被调用,剪辑设置为我的图层的边界,我无法在其外部绘制。

我的测试图层执行如下操作:

-(void)drawInContext:(CGContextRef)context 
{   
    [super drawInContext:context];      
    NSLog(@"mask to bounds=%d", self.masksToBounds); // NO  
    CGRect clip = CGContextGetClipBoundingBox(context);
    NSLog(@"clip=%f,%f,%f,%f", clip.origin.x, clip.origin.y, clip.size.width, clip.size.height); // reports the bounds

    CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);  
    CGContextBeginPath(context);
    CGContextSetLineWidth(context, 5.0);
    CGContextMoveToPoint(context, 0, 0);
    CGContextAddLineToPoint(context, 500, 0.0); // wider than my layer...
    CGContextStrokePath(context);
}

以下是我如何设置它:

- (void)viewDidLoad 
{
    [super viewDidLoad];
    CALayer *layer = [[MyLayer alloc] init];
    layer.needsDisplayOnBoundsChange=YES;
    layer.frame = CGRectMake(50, 50, 200, 200);
    [self.view.layer addSublayer:layer];
}

这仅仅是核心动画层的限制吗? (我是否需要在此图层上方绘制图层?)

感谢。

1 个答案:

答案 0 :(得分:4)

图层的内容无法溢出其边界;但是,您可以通过指定在边界外伸展的框架并将masksToBounds属性设置为NO(默认值)来添加溢出的子图层。