Iphone 带有自定义背景图像的UINavigationbar

Iphone 带有自定义背景图像的UINavigationbar,iphone,uinavigationbar,categories,Iphone,Uinavigationbar,Categories,我有一个自定义类别,可以根据我所在的视图为导航栏定义一个特殊的背景图像 在类别中,我使用 - (void)drawRect:(CGRect)rect 问题是,在导航控制器中浏览“我的视图”时,自定义图像会消失,留下一个320x44(条大小)的空白区域,直到下一个控制器重新应用(即大约1秒后) 这看起来很难看,我想知道是否有更好的方法来实现这一点,所以我有一个干净的实现,它看起来也很好,符合我的要求 提前谢谢 类别代码: - (void)initImageDictionary {

我有一个自定义类别,可以根据我所在的视图为导航栏定义一个特殊的背景图像

在类别中,我使用

- (void)drawRect:(CGRect)rect
问题是,在导航控制器中浏览“我的视图”时,自定义图像会消失,留下一个320x44(条大小)的空白区域,直到下一个控制器重新应用(即大约1秒后)

这看起来很难看,我想知道是否有更好的方法来实现这一点,所以我有一个干净的实现,它看起来也很好,符合我的要求

提前谢谢

类别代码:

- (void)initImageDictionary
   {
     if(navigationBarImages==NULL){
      navigationBarImages=[[NSMutableDictionary alloc] init];
    }   
}

- (void)drawRect:(CGRect)rect
{
    UIImage *imageName = [navigationBarImages objectForKey:[NSValue valueWithNonretainedObject: self]];

    UIImage *image = imageName;
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];

}


- (void)setMyImage:(UIImage*)image 
{
[navigationBarImages setObject:image forKey:[NSValue valueWithNonretainedObject: self]];
[self setNeedsDisplay];
}
然后我叫:

[self.navigationBar performSelectorInBackground:@selector(setMyImage:) withObject:[UIImage imageNamed:imageTopbar]];

您应该仅在主线程上使用UIKit。

在ViewController中,尝试以下操作,其中@“BGimage.png”是您的图像文件:

//将图像作为视图的bg图案(平铺)放置
//self.view.backgroundColor=[UIColor-WithPatternImage:[UIImage ImageName:@“bImage.png”]

你能发布你已经实现的代码来获得更好的想法吗?添加了一些代码,希望它能帮助你。试试这个链接,检查它,但它基本上是关于uitabbar和其他选项。你想让我暗示一下后者吗?另外,提供的链接与我的问题无关。你不应该在后台线程中调用
setMyImage:
。UIKit不是线程安全的,因此延迟很可能是其副作用。