Рисование pdf-страницы в контексте с помощью uitabbarcontroller - PullRequest
1 голос
/ 17 ноября 2010

У меня есть uiviewcontroller, который содержит pdf.

PDF рисуется в контексте viewcontroller и частично покрывается панелью навигации вверху и панелью вкладок внизу (это то, что я хочу).

Я хочу скрыть два бара двойным касанием и визуализировать полную страницу PDF.

Проблема в том, что нижняя часть PDF не прорисована, и когда я скрываю нижнюю вкладку, Бар этоФакт становится очевидным (хорошо работает скрытие панели навигации сверху).

Мой вопрос: как можно нарисовать PDF в «полном» контексте после скрытия Bottombar?

(Я уже пытался использовать setNeedsDisplay для принудительного перерисовки, но контекст остается тем же после скрытия баров)

Ниже приведен код, который рисует страницу PDF:

-(void)drawLayer:(CALayer*)layer inContext:(CGContextRef)ctx

{

CGContextSetRGBFillColor(ctx, 1.0, 1.0, 1.0, 1.0);
CGContextFillRect(ctx, self.bounds);
CGContextTranslateCTM(ctx, 0.0, self.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextConcatCTM(ctx, CGPDFPageGetDrawingTransform(pdfPage,kCGPDFMediaBox,self.bounds, 0, true));
CGContextDrawPDFPage(ctx, pdfPage);

}

код, который инициализирует столбцы (в приложении applelegate):

tabBarController = [[UITabBarController alloc] init];

MagazineViewController *magazineViewController = [[MagazineViewController alloc] init];
NewsTableViewController *newsViewController = [[NewsTableViewController alloc] init];
VideoViewController *videoViewController = [[VideoViewController alloc] init];

UINavigationController *magazineNavigationController = [[UINavigationController alloc] initWithRootViewController:magazineViewController];  
UINavigationController *newsNavigationController = [[UINavigationController alloc] initWithRootViewController:newsViewController];  
UINavigationController *videoNavigationController = [[UINavigationController alloc] initWithRootViewController:videoViewController];

magazineNavigationController.navigationBar.tintColor = [UIColor blackColor];
newsNavigationController.navigationBar.tintColor = [UIColor blackColor];
videoNavigationController.navigationBar.tintColor = [UIColor blackColor];

NSArray *tabsArray = [NSArray arrayWithObjects:magazineNavigationController, newsNavigationController, videoNavigationController, nil];

tabBarController.viewControllers = tabsArray;

[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

И код, который скрывает столбцы:

for (UINavigationController *controller in tabBarController.viewControllers) {
        if(controller.navigationBar.topItem.title == @"Magazine") {
            [controller setNavigationBarHidden:(!controller.navigationBar.hidden) animated:YES];
            tabBarController.tabBar.hidden = !tabBarController.tabBar.hidden;
            [self setNeedsDisplay];
            return;
        }
    }

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 ноября 2010

Проблема в коде, который скрывает ваши бары, здесь:

[controller setNavigationBarHidden:(!controller.navigationBar.hidden) animated:YES];
tabBarController.tabBar.hidden = !tabBarController.tabBar.hidden;

Первая строка - это вспомогательный метод, который удаляет панель навигации для вас, поэтому он удаляет себя из поля зрения. Вторая строка просто изменяет свойство 'hidden' - поэтому оно не удаляется само по себе.

Чтобы панель вкладок хорошо скрывалась и не ограничивала ваш контекст , нужно настроить ее рамку. Вот хороший пример , или вы можете просто установить рамку на панели вкладок следующим образом:

своп со второй строкой

tabBarController.tabBar.frame = CGRectMake(0,0,0,0);
0 голосов
/ 17 ноября 2010

NSLog self.bounds, вот хорошая функция панели инструментов:

-(NSString*)getStringFromCGRect:(CGRect)rect WithLabel:(NSString*)idName
{


return [NSString stringWithFormat:@">%@\nx:%f\ny:%f\nWidth:%f\nHeight:%f\n\n",idName,rect.origin.x,rect.origin.y,rect.size.width,rect.size.height];
}

Я бы предположил, что ваши границы будут равны размеру вашего представления - вашим высотам панели инструментов, если вы не настраиваете какие-либо CALayer при создании класса рисования?

...