我一直试图弄清楚如何在我的iPhone应用程序的UINavigationBar
后面显示背景图像,并且多次遇到相同的解决方案,如下所示:
@implementation UINavigationBar (UINavigationBarCategory) {
- (void)drawRect:(CGRect)rect {
UIImage *img = [UIImage imageNamed: @"logo_bar.png"];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, CGRectMake(0, 0, 317, 27), img.CGImage);
}
@end
哪种程度有效
我的图片倒置和倒退 !!那到底为什么会这样?我检查了图像本身,这很好。这个转换将在哪里应用?
我还有其他问题,例如:
如何选择显示BG图像或者在所选屏幕上切换其alpha?有一个特殊的屏幕,其中有一个后退按钮,它覆盖了我不想要的图像,我宁愿不在该屏幕上显示图像。
图像不是UINavigationBar
的整个高度,只是它的一小部分(你可以看到27)。如何使用这种技术保留酒吧其余部分的色调?
谢谢,我之前没有使用过类别可能是我理解这一点的关键,但也许不是......
答案 0 :(得分:2)
// Drawing code
CGContextRef c = UIGraphicsGetCurrentContext();
UIImage *back=[UIImage imageNamed:@"bar.png"];
CGContextScaleCTM(c,1,-1);
CGContextTranslateCTM(c,0,-44);
CGContextDrawImage(c,CGRectMake(0, 0, 320, 44),[back CGImage]);
这是我绘制自定义导航栏的方式。希望有所帮助。
答案 1 :(得分:0)
您也可以在UINavigationBar类别类的 drawLayer:inContext:方法中执行此操作。在 drawLayer:inContext:方法中,您可以绘制要使用的背景图像。此代码还支持纵向和横向。
- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)context
{
if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
return;
}
UIImage *image = (self.frame.size.width > 320) ?
[UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];
CGContextClip(context);
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}
关于自定义UINavigationBar外观的this complete demo Xcode project可能会有所帮助。