Как я могу добавить прикрепленные тени на uinavigationbar и uitoolbar - PullRequest
2 голосов
/ 08 апреля 2011

Я работаю над приложением, которое использует пользовательское изображение для UINavigationBar и UIToolbar, что нормально, но им также нужна тень под панелью навигации и над панелью инструментов, которая всегда будет располагаться над всеми другими контроллерами представления. Я не могу просто сделать фоновые изображения, которые включают тени, поскольку это не будет хорошо работать с моими представлениями таблицы. Мне также нужно анимировать тени, когда я устанавливаю панель навигации и панель инструментов скрытыми (анимированными).

Я просмотрел Stack Overflow и другие источники в сети и работал с предлагаемыми решениями, но не могу успешно создать подкласс UINavigationBar, UIToolbar или даже UINavigationController, чтобы получить результаты, которые мне нужны.

Буду признателен за любую помощь, которая может быть предложена. Спасибо:)

Ответы [ 3 ]

2 голосов
/ 09 апреля 2011

В конце я решил просто использовать фоновые png-изображения с тенями и применить их с подклассом для UINavigationBar и UIToolbar, который реализовал метод drawRect (для фонового изображения) и метод sizeThatFits для изменения размера панели навигации. Вот конечный продукт (кнопка скрывает столбики):

Вот методы, которые я реализовал в каждом подклассе:

 - (void)drawRect:(CGRect)rect {
   UIImage *image = [[UIImage imageNamed:@"bargloss-withshadow.png"] retain];
   [image drawInRect:rect];
   [image release];
}


- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(320,60);
    return newSize;
}

Обратите внимание, что я также сделал столбики Black Translucent в IB так, чтобы содержимое перетекало под них.

1 голос
/ 25 июля 2012

Это может быть сделано относительно легко, если вы не делаете ничего слишком сложного с вашей иерархией представлений.Добавьте следующие строки кода в ваше приложение: метод didFinishLaunchingWithOptions.

dispatch_async(dispatch_get_main_queue(), ^{
    UIWindow* mainWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
    UIView* mainView = [[mainWindow subviews] objectAtIndex:0];
    UIImageView* shadowImageView = [[UIImageView alloc] initWithImage:kImgNavbarShadowResizeable];
    shadowImageView.frame = CGRectMake(0, 64, 320, shadowImageView.frame.size.width);
    [mainView insertSubview:shadowImageView atIndex:1];
});

shadowImageView - это изображение, которое вы хотите использовать в качестве тени.

0 голосов
/ 08 апреля 2011

Ознакомьтесь с блогом Мэтта Галлахера .Он охватывает (часть), что вы хотите сделать.Кроме этого, вы можете попробовать добавить «теневой вид» над вашим навигационным контроллером, который вы можете анимировать по своему желанию.

...