2011-02-27 63 views
1

我有一個NavigationController定製UINavigationBar的:更改UINavigationBar的界面時,方向更改

@implementation UINavigationBar (CustomImage) 
- (void)drawRect:(CGRect)rect 
{ 
    UIImage *image = [UIImage imageNamed: @"banner.png"]; 
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
} 
@end 

我允許使用旋轉shouldAutorotateToInterfaceOrientation.

當我轉,我想改變banner.pngbanner_port.png

我該怎麼辦?

+1

重寫'-drawRect:'通過一個類別是一個*糟糕的*想法。 'UINavigationBar'的實現是不透明的,你不知道底下會發生什麼。對此如何運作這樣的假設是使代碼在未來破裂的好方法。 – 2011-02-28 08:56:08

回答

0

[的UIDevice currentDevice] .orientation會告訴你該設備認爲這事情是這樣的......

你可以在它給你的價值這一點上做的,如果或交換機。

0

您可以讓導航欄對象偵聽具有屬性'orientation'的全局UIDeviceOrientationDidChangeNotification,並在事件發生時進行必要的更改。

0

參見Custom UINavigationBar Background

我同意機智與戴維德隆 - 重寫的drawRect並非明智之舉,它可能會破壞一些日子。另外,你的類別的drawRect替換原始drawRect - 你沒有選擇調用超級獲得默認功能。

請注意,如果您偵聽對UIDeviceOrientationDidChangeNotification的更改,則需要知道有六個設備方向(通常是四個,再加上正面朝上,正面朝下)。

寫得不好的代碼經常被看到,它不承認正面和麪朝下設備方向的可能性。

N.B.您還可以訪問用戶界面的當前狀態欄方向 - 這不一定與UIDeviceOrientation相同!