2011-05-12 30 views
4

獲取錯誤「:doClip:空路徑」。 onCGContextClip空路徑錯誤(自定義UINavigationBar背景)

CGContextClip(ctx); 

當使用Ahmet Ardal的自定義代碼爲UINavigationBar自定義背景。

理想情況下,我想解決這個錯誤 - 它會停止蘋果的批准嗎?

我的理解是它定義了裁剪區域的繪製。我製作的導航欄圖形尺寸合適,因此理論上它們不需要裁剪。

因此註釋掉了違規行。一切似乎是偉大的,但擔心它可能有反響,我不知道關

下面是調整了代碼,所以它的工作原理,如果你有一個更深層次的景觀酒吧,說在它分段控制

- (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); 
} 

回答

0

註釋掉該行,錯誤消失,函數表現正常。

警告:我的顯卡是正確尺寸的矩形,如果你把所有舊圖形插入導航欄

2

我繼承了drawLayer:inContext:方法,它調用CGContextClip(...)併產生" <錯誤的應用程序可能會導致問題> :doClip:空路徑。 "消息。

沒有任何問題提交給商店;我非常確信這個錯誤是無害的。

根據蘋果的文檔:

參數
Ç
包含路徑的圖形上下文。如果上下文沒有當前路徑,則該函數不執行任何操作。

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

如果你真的想避免記錄錯誤,你應該叫CGContextClip(...)前檢查方面:

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