Ajouter 2 fichiers à votre projet, appelez UINavigationBar-CustomTexture.h
et UINavigationBar-CustomTexture.m
par exemple, dans les fichiers mis ceci:
.h:
#import <UIKit/UIKit.h>
@interface UINavigationBar (CustomTexture)
@end
fichier .m:
#import "UINavigationBar-CustomTexture.h"
@interface UIView (CustomTexture)
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
@end
@implementation UINavigationBar (CustomTexture)
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
if ([self isMemberOfClass:[UINavigationBar class]]){
UIImage *image = [UIImage imageNamed:@"myImage.png"];
CGContextScaleCTM(ctx, 1.0f, -1.0f);
CGContextDrawImage(ctx, CGRectMake(0, -image.size.height, self.frame.size.width, self.frame.size.height), image.CGImage);
}else{
[super drawLayer:layer inContext:ctx];
}
}
@end
Incluez le fichier .h dans lequel vous instanciez votre contrôleur de navigation. Faites votre fichier png 320x44. En fonction de votre texture, changer la couleur de la teinte de votre barre de navigation à quelque chose comme ça (pour que les boutons de la barre de navigation regarder mieux):
[self.navigationController.navigationBar setTintColor:[UIColor colorWithHue:0 saturation:0 brightness:0.5f alpha:0.1f]];
Cela fonctionne pour moi, mais je reçois un ": doClip: chemin vide.". Si je supprime le CGContextClip (ctx); eux l'avertissement disparaît (et tout fonctionne toujours). –
morais
Une catégorie n'est vraiment pas un bon moyen de gérer le dessin personnalisé en général. Vous remplacez l'implémentation standard (s'il y en a une) de UINavigationBar et n'appelez jamais cette implémentation. Le sous-classement est la bonne façon de le gérer, mais il nécessite un peu plus de travail en définissant la classe de la barre de navigation dans le fichier xib, mais il est bien plus à l'épreuve du temps. – wbyoung