Настройка контроллера панели вкладок и проблема «Больше» - PullRequest
0 голосов
/ 01 июля 2011

Вот проблема:

У меня настроен контроллер панели вкладок, поэтому подсвечивание элемента вкладки будет желтым, а не синим по умолчанию.Неправильно то, что появляется элемент «Больше», потому что у меня слишком много элементов вкладки (удаление их на самом деле не вариант), а это «еще» остается синим.

Я использовал классы, полученные изИнтернет для реализации настройки.Вот код:

// UITabBar + ColorExtensions.m

@implementation UITabBar (ColorExtensions)

- (void)recolorItemsWithColor:(UIColor *)color shadowColor:(UIColor *)shadowColor shadowOffset:(CGSize)shadowOffset shadowBlur:(CGFloat)shadowBlur
{

CGColorRef cgColor = [color CGColor];
CGColorRef cgShadowColor = [shadowColor CGColor];
for (UITabBarItem *item in [self items])
    if ([item respondsToSelector:@selector(selectedImage)] &&
        [item respondsToSelector:@selector(setSelectedImage:)] &&
        [item respondsToSelector:@selector(_updateView)])
    {
        CGRect contextRect;
        contextRect.origin.x = 0.0f;
        contextRect.origin.y = 0.0f;
        contextRect.size = [[item selectedImage] size];
        // Retrieve source image and begin image context
        UIImage *itemImage = [item image];
        CGSize itemImageSize = [itemImage size];
        CGPoint itemImagePosition; 
        itemImagePosition.x = ceilf((contextRect.size.width - itemImageSize.width) / 2);
        itemImagePosition.y = ceilf((contextRect.size.height - itemImageSize.height) / 2);
             UIGraphicsBeginImageContext(contextRect.size);
            CGContextRef c = UIGraphicsGetCurrentContext();

        // Setup shadow
        CGContextSetShadowWithColor(c, shadowOffset, shadowBlur, cgShadowColor);

        // Setup transparency layer and clip to mask
        CGContextBeginTransparencyLayer(c, NULL);
        CGContextScaleCTM(c, 1.0, -1.0);
        CGContextClipToMask(c, CGRectMake(itemImagePosition.x, -itemImagePosition.y, itemImageSize.width, -itemImageSize.height), [itemImage CGImage]);

        // Fill and end the transparency layer
        CGContextSetFillColorWithColor(c, cgColor);
        contextRect.size.height = -contextRect.size.height;
        CGContextFillRect(c, contextRect);
        CGContextEndTransparencyLayer(c);

        // Set selected image and end context
        [item setSelectedImage:UIGraphicsGetImageFromCurrentImageContext()];
        UIGraphicsEndImageContext();

        // Update the view
        [item _updateView];
    }
}

@end

и контроллер:

@implementation AATabBarController

- (void)viewDidLoad {
[super viewDidLoad];

// Put in a background
CGRect frame = CGRectMake(0.0, 0, self.view.bounds.size.width, 48);
backgroundView = [[UIView alloc] initWithFrame:frame];

[backgroundView setBackgroundColor:[UIColor colorWithRed:0.0
                                             green:0.0
                                              blue:0.0
                                             alpha:0.1]];
[self.tabBar insertSubview:backgroundView atIndex:0];
}

-(void)dealloc {
[backgroundView release];

[super dealloc];
}

-(void)updateTabColor:(UIColor *)color {
// Recolor the tab bar
[self.tabBar recolorItemsWithColor:color shadowColor:[UIColor blackColor] shadowOffset:CGSizeMake(0.0f, -1.0f) shadowBlur:3.0f]; 
}

-(void)updateBackgroundColor:(UIColor *)color {
// Update the background color
[backgroundView setBackgroundColor:color];
}

@end

Кто-нибудь знает, что я должен делать так "больше "Вкладка товара - это заказной цвет?

1 Ответ

1 голос
/ 01 июля 2011

Этот код выглядит очень похоже на код в этом вопросе . Я знаю, что вы задаете другой вопрос здесь (связанный вопрос спрашивает «будет ли мое приложение отклонено», на что ответ «да»). Тем не менее, вы используете одни и те же приватные методы UITabBarItem, поэтому вряд ли кто-то может дать вам надежный ответ.

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