1

J'ai un uiviewcontroller qui contient un pdf.Dessiner pdfpage en contexte avec uitabbarcontroller

Le pdf est dessiné dans le contexte du viewcontroller et est partiellement couvert par la barre de navigation en haut et la barre de tabulation en bas (c'est ce que je veux).

Je veux cacher les deux barres en tapant deux fois et visualiser la page pdf complète.

Le problème est que la partie inférieure du pdf n'est pas dessinée et quand je cache l'onglet inférieurBar ce fait devient évident (le masquage de la barre de navigation sur le dessus fonctionne bien).

Ma question est: comment est-il possible de dessiner le pdf dans le contexte "complet" après la dissimulation de bottombar?

(j'ai déjà essayé d'utiliser setNeedsDisplay pour forcer le redécoupage, mais le contexte est toujours le même après que les barres se cacher)

Voici le code qui dessine la page 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); 

}

le code qui en itializes les barres (dans le 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]; 

et le code qui cache les barres:

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

Merci

Répondre

-1

NSLog les self.bounds, Heres une belle fonction de boîte à outils:

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

Je suppose que vos limites seront votre taille d'affichage-vos hauteurs de barre d'outils, si ce n'est pas vous la configuration de CALayer lorsque vous créez votre classe de dessin?

+0

fonction Nice, mais il ne sera pas révéler beaucoup dans ce cas. – Brandon

+0

Un ds unesesary à mon avis –

+0

La taille rect est correcte (320 x 460) mais le pdf reste écrêté.Je ne configure pas de CALayer, mais maintenant j'essaie de dessiner ovverriding - (void) drawRect: (CGRect) r mais le résultat est le même – Giovanni

0

Le problème est dans le code qui cache vos barres, ici:

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

La première ligne est une méthode d'assistance qui supprime la barre de navigation pour vous - il se retire de la vue bien. La deuxième ligne change juste la propriété 'cachée' - ainsi elle ne se retire pas très bien.

Afin d'obtenir la barre de tabulation se cache bien et sans écrêter votre contexte est d'ajuster son cadre. Voici un nice example, ou vous pouvez simplement définir le cadre de votre barre d'onglets comme:

swap avec la deuxième ligne

tabBarController.tabBar.frame = CGRectMake(0,0,0,0); 
+0

http://meta.stackexchange.com/questions/19268/how-should-down-voting-be-used –

+0

Merci, avec l'exemple l'animation fonctionne bien, mais le pdf reste clippé par la barre de fond invisible. – Giovanni