Изменение UINavigationBar при изменении ориентации интерфейса - PullRequest
1 голос
/ 28 февраля 2011

У меня есть NavigationController с настроенным 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.pngс banner_port.png

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 28 февраля 2011

Вы можете заставить свой объект панели навигации прослушивать глобальный UIDeviceOrientationDidChangeNotification, который имеет свойство 'direction', и вносить необходимые изменения, когда происходит событие.

0 голосов
/ 01 марта 2011

См. Также Пользовательский фон UINavigationBar

Я согласен с Дейвом Делонгом: переопределение drawRect не мудро, оно может сломаться когда-нибудь. Кроме того, drawRect в вашей категории заменяет оригинальный drawRect - у вас нет возможности вызвать super, чтобы получить функциональность по умолчанию.

Обратите внимание, что если вы слушаете изменения в UIDeviceOrientationDidChangeNotification, вы должны знать, что существует шесть ориентаций устройства (обычные четыре, плюс лицевой стороной вверх и вниз).

Часто встречается плохо написанный код, который не учитывает возможность ориентации устройства вверх или вниз.

N.B. Вы также можете получить доступ к текущей ориентации строки состояния пользовательского интерфейса, которая не обязательно совпадает с UIDeviceOrientation!

0 голосов
/ 28 февраля 2011

[UIDevice currentDevice] .orientation скажет вам, как устройство считает, что это ...

Вы можете сделать if или переключить в этой точке значение, которое оно вам дает.

...