установка градиента на фоне UITabBar - PullRequest
3 голосов
/ 05 сентября 2011

Как проще всего добиться чего-то подобного:

enter image description here

Это через создание подклассов UITabBarController?Если да, какое свойство нужно изменить?

Ответы [ 4 ]

0 голосов
/ 07 июля 2017

У меня была та же проблема с моим приложением, и я придумал следующее: в applicationDidFinishLaunching методе я создал функцию для рисования градиента и использовал экземпляр моего UITabBarController для установки правильного градиентного кадра в зависимости от ширины устройства.

- (UIImage *)drawGradientInView:(UITabBarController *) tabBarVC {
    CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(CGRectGetMinX(tabBarVC.tabBar.frame), CGRectGetMinY(tabBarVC.tabBar.frame), CGRectGetWidth(tabBarVC.view.frame), CGRectGetHeight(tabBarVC.tabBar.frame));

    //set up your gradient
    //......

    UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return gradientImage;
}

получить экземпляр UITabBarController

UITabBarController *tabVC = (UITabBarController *)[UIApplication sharedApplication].windows.firstObject.rootViewController;

установить свой градиент

[UITabBar appearance].backgroundImage = [self drawGradientInView:tabVC];

Я не уверен, что это правильный подход, но он сработал для меня.

0 голосов
/ 05 сентября 2011

Да, создание подклассов UITabbarController является правильным способом сделать это.

Перезаписать метод drawRect:

- (void)drawRect:(CGRect)rect {
    [[UIImage imageNamed:@"yourNavigationBar.png"] drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height) ];
}

И добавить изображение с градиентом в ваш проект.

0 голосов
/ 13 января 2017

Это старый вопрос, но он встает первым в поиске градиентов TabBar.Гораздо проще сделать это с внешностью.Просто поместите это в ваш applicationDidFinishLaunching метод.

[[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"navBarImage_1x49"]];

И, в качестве бонуса, если вы предпочитаете создавать градиентное изображение в коде, вы можете сделать это:

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = CGRectMake(0, 0, 1, 49);
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor.darkGrayColor] CGColor], (id)[UIColor.blackColor] CGColor], nil];
UIGraphicsBeginImageContext(gradient.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[gradient renderInContext:context];
UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
0 голосов
/ 05 сентября 2011
@interface UITabBarController (private)
- (UITabBar *)tabBar;
@end

@implementation CustomizeUITabBarController


- (void)viewDidLoad {
    [super viewDidLoad];

    CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    [v setBackgroundColor:kMainColor];
    [v setAlpha:0.5];
    [[self tabBar] addSubview:v];
    [v release];

}
@end

Надеюсь, это поможет вам ....

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