iphone - 为什么我的 CGContext 被剪裁到边界?

标签 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];
}

这只是核心动画层的限制吗? (是否需要在该图层之上的图层中进行绘制?)

谢谢。

最佳答案

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

关于iphone - 为什么我的 CGContext 被剪裁到边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431914/

相关文章:

ios - 如何填充 Quartz 2D 路径下方的区域?

iphone - iphone 中 MFMessageComposeViewController 的字符限制

iphone - 为什么我在编辑图像时会得到这些奇怪的结果?

c - 生成范围内的随机数?

ios - 从黑白位图图像中提取路径信息

ios - 如何在 iOS 上生成文本内容为 "real"的 PDF?

ios - 如何在 IOS 应用程序中显示图片?

ios - 为什么我的表格 View 单元格的高度在手机上如此大,但在模拟器中却不然?

iphone - 如何将 viewcontroller 作为 self viewcontroller 分配给 appdelegate 类?

ios - 未在 catch block 中处理的异常