界面方向改变时更改UINavigationBar

时间:2011-02-27 22:07:53

标签: iphone ios4 uinavigationcontroller uinavigationbar

我有一个带有自定义UINavigationBar的NavigationController:

@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.png更改banner_port.png

我该怎么做?

3 个答案:

答案 0 :(得分:0)

[UIDevice currentDevice] .orientation会告诉你设备认为它是哪种方式......

你可以在它给你的值上做if或切换。

答案 1 :(得分:0)

您可以使导航栏对象监听具有属性“orientation”的全局UIDeviceOrientationDidChangeNotification,并在事件发生时进行必要的更改。

答案 2 :(得分:0)

另见Custom UINavigationBar Background

我同意Dave DeLong的意见 - 压倒drawRect是不明智的,它可能有一天会破裂。此外,您的类别drawRect 会替换原始的drawRect - 您无法选择调用super来获取默认功能。

请注意,如果您监听UIDeviceOrientationDidChangeNotification的更改,则需要注意有六个设备方向(通常为四个,加上面朝上和面朝下)。

经常看到写得不好的代码,它不承认面朝上和面朝下设备方向的可能性。

N.B。您还可以访问用户界面的当前状态栏方向 - 这不一定与UIDeviceOrientation相同!