Настройка фонового изображения UIToolBar

У меня есть изображение, которое я хотел бы использовать в качестве фона для UIToolBar в приложении iOS 5+. Фоновое изображение меняется в зависимости от действий, предпринятых в представлении. Изображение больше, чем UIToolBar, поэтому размер изображения нужно изменять как уменьшение, а не увеличение размера.

После рассмотрения других вопросов здесь, а также других исследований проблемы, рекомендованное решение не работает. Рекомендация следующая:

UIImage *topimg = [[UIImage imageNamed:@"headerBar-Human.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
[_headerBar setBackgroundImage:topimg forToolbarPosition:UIToolbarPositionTop barMetrics:UIBarMetricsDefault];

Я безуспешно пробовал использовать разные значения в вызове UIEdgeInsetsMake. Проблема в том, что изображение вообще не отображается. Отображается синий фон панели инструментов по умолчанию.

Если я удалю функцию resizableImageWithCapInsets, изображение будет отображаться, но только часть изображения, покрытая прямоугольными координатами панели инструментов.

Я также попытался создать UIImageView, добавив изображение и добавив его на панель инструментов, но результаты те же.

У кого-нибудь есть предложения?


person iPhone Guy    schedule 13.08.2013    source источник
comment
Если вы хотите настроить UIToolBar или UINavigationBat, вы должны создать его подкласс.   -  person zbMax    schedule 13.08.2013
comment
Начиная с iOS 5 вам не нужно создавать подклассы. Существует метод backgroundImageForToolbarPosition: barMetrics:, открытый Apple в iOS 5, позволяющий добавлять изображение в качестве фона. Вот где у меня проблема.   -  person iPhone Guy    schedule 13.08.2013


Ответы (1)


Вы можете использовать эту функцию для изменения размера вашего backgroundImage:

- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize
{
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

Я предлагаю вызывать эту функцию с вашим _headerBar.frame.size в качестве второго параметра.

person zbMax    schedule 13.08.2013
comment
Я добавил это как категорию в UIImage, и он хорошо работает. Благодарность! - person iPhone Guy; 13.08.2013