iPhone UINavigationBar пользовательский внешний вид - PullRequest
2 голосов
/ 05 августа 2010

Я пытался выяснить, как отобразить фоновое изображение за UINavigationBar в моем приложении для iPhone, и много раз сталкивался с одним и тем же решением, а именно:

@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

, который работаетдо степени

Мое изображение вверх ногами и назад !!с какой стати это будет?Я проверил само изображение, которое хорошо.Где будет применено это преобразование ??

У меня также есть дополнительные вопросы, такие как:

  1. Как я могу выбрать отображение изображения BG или, возможно, переключить его альфа навыбранные экраны?Есть один конкретный экран, где есть кнопка «Назад», и она закрывает изображение, которое мне не нужно, я бы предпочел просто не отображать изображение на этом экране.

  2. Изображение невся высота UINavigationBar - это всего лишь маленький кусочек (27, как вы можете видеть).Как я могу сохранить оттенок цвета для остальной части полосы, используя эту технику?

Спасибо, я не использовал Категории, до которых я мог понять это, но, возможно, нет...

Ответы [ 2 ]

2 голосов
/ 05 августа 2010
// 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]);

Вот так я рисую свою пользовательскую панель навигации. Надеюсь, это поможет.

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

Вы также можете сделать это в методе drawLayer: inContext: в классе категории UINavigationBar. Внутри метода 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);
}

И этот полный демонстрационный проект Xcode по настройке внешнего вида UINavigationBar может быть полезен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...