代码之家  ›  专栏  ›  技术社区  ›  Pat Niemeyer

为什么我的CGContext被限制了?

  •  3
  • Pat Niemeyer  · 技术社区  · 14 年前

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

    -(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 回复  |  直到 14 年前
        1
  •  4
  •   rpetrich    14 年前

    层的内容不可能溢出其边界;但是,可以通过指定超出边界的帧并设置 masksToBounds 属性到 NO (默认设置)。