#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
Графический контекст, содержащий путь. Если контекст не имеет текущего пути, функция ничего не делает.
Если вы действительно хотите предотвратить регистрацию ошибки, вам, вероятно, следует проверить контекст перед вызовом CGContextClip(...)
:
if (!CGContextIsPathEmpty(c))
{
CGContextClip(c);
}
Ответ №2:
Закомментировал строку, ошибка устранена, функция работает.
Предостережение: размер моей графики был правильным для прямоугольника, может вызвать проблемы, если вы добавите какую-либо старую графику в панель навигации