Ошибка CGContextClip empty path (пользовательский фон панели UINavigationBar)

#iphone #ios4 #background #uinavigationbar

#iPhone #ios4 #фон #панель uinavigationbar

Вопрос:

Получение ошибки «: DOCCLIP: пустой путь». на

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

Ответ №1:

Я унаследовал приложение с drawLayer:inContext: методом, который вызывает CGContextClip(...) и выдает «<Ошибка>: docclip: пустой путь». сообщение.

Не было никаких проблем с отправкой этого в магазин; Я почти уверен, что ошибка безвредна.

Согласно документам Apple:

Параметры
c
Графический контекст, содержащий путь. Если контекст не имеет текущего пути, функция ничего не делает.

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

Если вы действительно хотите предотвратить регистрацию ошибки, вам, вероятно, следует проверить контекст перед вызовом CGContextClip(...) :

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

Ответ №2:

Закомментировал строку, ошибка устранена, функция работает.

Предостережение: размер моей графики был правильным для прямоугольника, может вызвать проблемы, если вы добавите какую-либо старую графику в панель навигации