CGContextClip空路径错误(自定义UINavigationBar背景)

时间:2011-05-12 17:49:35

标签: iphone ios4 background uinavigationbar

获取错误“:doClip:空路径。”在

CGContextClip(ctx);

使用Ahmet Ardal的代码进行UINavigationBar自定义背景的自定义。

理想情况下,我想解决这个错误 - 它会停止Apple的批准吗?

我的理解是它定义了要绘制的剪裁区域。我已经使我的导航栏图形尺寸合适,所以理论上它们不需要被剪裁。

因此注释掉了违规行。一切似乎都很棒,但担心它可能会产生影响我不知道

下面是调整后的代码,如果你有一个更深的横向条,它就可以使用了分段控件

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
        return;
    }

    //NSLog(@"NAV HEIGHT IS %f %f",self.frame.size.height, self.frame.size.width);  

    UIImage *image = nil; 

    if (self.frame.size.width > 320) {
        if (self.frame.size.height > 32) {
            // Deep NavBar
            image = [UINavigationBar bgImageLandscapeDeep];
        } else {
            image = [UINavigationBar bgImageLandscape];
        }
    } else {
        image = [UINavigationBar bgImagePortrait];
    }


    NSLog(@"CGContextClip produces <Error>: doClip: empty path. Path is %@",ctx);
    //CGContextClip(ctx);

    CGContextTranslateCTM(ctx, 0, image.size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}

2 个答案:

答案 0 :(得分:2)

我继承了一个带有drawLayer:inContext:方法的应用,该方法调用CGContextClip(...)并生成“&lt;错误&gt;:doClip:空路径”。消息。

将此商品提交给商店没有任何问题;我非常有信心这个错误是无害的。

根据Apple的文档:

  

<强>参数
  ç
  包含路径的图形上下文。如果上下文没有当前路径,则该函数不执行任何操作。

http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html

如果你真的想阻止记录错误,你应该在调用CGContextClip(...)之前检查上下文:

if (!CGContextIsPathEmpty(c))
{
    CGContextClip(c);
}

答案 1 :(得分:0)

注释掉行,错误消失,函数表现。

警告:我的图形尺寸正确为rect,如果你把任何旧图形扔进导航栏可能会引起问题