我有一个包含pdf的uiviewcontroller。
pdf是在viewcontroller的上下文中绘制的,部分由顶部的导航栏和底部的tabbar覆盖(这就是我想要的)。
我想用双击隐藏这两个栏,并可视化完整的pdf页面。
问题是pdf的底部没有绘制,当我隐藏底部tabBar时,这个事实变得明显(顶部隐藏导航栏效果很好)。
我的问题是:在隐藏底栏后如何在“完整”上下文中绘制pdf?
(我已经尝试使用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);
}
初始化条形码的代码(在appdelegate中):
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;
}
}
由于
答案 0 :(得分:0)
问题在于隐藏栏的代码,在这里:
[controller setNavigationBarHidden:(!controller.navigationBar.hidden) animated:YES];
tabBarController.tabBar.hidden = !tabBarController.tabBar.hidden;
第一行是一个帮助方法,可以为您删除导航栏 - 因此它可以很好地从视图中删除。 第二行只是更改'隐藏'属性 - 所以它不会很好地删除自己。
为了让标签栏隐藏得很好而不剪切你的上下文是调整它的框架。这是nice example,您也可以在标签栏上设置框架,如:
与第二行交换
tabBarController.tabBar.frame = CGRectMake(0,0,0,0);
答案 1 :(得分:-1)
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
?