CGContextClip ошибка пустого пути (пользовательский фон UINavigationBar) - PullRequest
4 голосов
/ 12 мая 2011

Получение ошибки ": doClip: empty path."на

CGContextClip(ctx);

при использовании кода Ахмета Ардала для пользовательского для пользовательского фона UINavigationBar.

В идеале я хотел бы устранить эту ошибку - остановит ли это одобрение Apple?

Насколько я понимаю, он определяет область отсечения для рисования. Я сделал графику navbar нужного размера, поэтому теоретически их не нужно обрезать.

Поэтому закомментировал оскорбительную строку.Кажется, что все замечательно, но, учитывая, что это может иметь последствия, о которых я не знаю

Ниже приведен код, так что он работает, если у вас есть более глубокая горизонтальная панель, скажем, с сегментированным элементом управления

- (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 ]

2 голосов
/ 25 июля 2011

Я унаследовал приложение с drawLayer:inContext: методом, который вызывает CGContextClip(...) и выдает «: doClip: empty path».сообщение.

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

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

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

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

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

if (!CGContextIsPathEmpty(c))
{
    CGContextClip(c);
}
0 голосов
/ 14 мая 2011

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

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

...