Как программно отобразить плоский фоновый UIColor в качестве фона для панели инструментов UIToolbar?

#iphone #cocoa-touch #ios4 #uitoolbar

#iPhone #cocoa-touch #ios4 #uitoolbar

Вопрос:

Итак, я последовал руководству, которое позволяет мне создать подкласс UIToolbar и нарисовать изображение в качестве пользовательского фона для панели инструментов UIToolbar.

Код был примерно таким:

 // Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    UIImage *backgroundImage = [UIImage imageNamed:@"toolbar_background.png"];
    [backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
  

Это работает безупречно. Учитывая, что я просто хочу, чтобы фон моей панели инструментов был однотонным. В принципе, что-то вроде [UIColor blackColor], есть ли более простой способ сделать это в методе drawRect?

Необходимость создавать плоское черное фоновое изображение размером 320 x 44 пикселя и использовать его с приведенным выше кодом кажется чрезмерными накладными расходами, когда доступен [UIColor blackColor]? Я просто не уверен, как это реализовать здесь.

Я думал о том, чтобы сделать что-то подобное вместо этого:

 - (void)drawRect:(CGRect)rect
{
  UIView *test = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.frame.size.width,self.frame.size.height)];

  test.backgroundColor = [UIColor blackColor];
  [self addSubview:test];
}
  

Но это не работает, потому что тогда UIView ПОКРЫВАЕТ все элементы панели инструментов, которые я добавлю позже, т. Е. Панель инструментов черная, да, но черный цвет покрывает все элементы панели инструментов, поэтому они не видны.

Есть ли обходной путь?

Спасибо.

Комментарии:

1. Переопределять такой drawRect: метод — ФЕНОМЕНАЛЬНО ПЛОХАЯ ИДЕЯ .

Ответ №1:

Вы можете создать плоский UIToolbar без необходимости создавать подкласс. Просто установите backgroundColor, BackgroundImage и shadowImage.

 [toolbar setBackgroundColor:[UIColor blackColor]];
[toolbar setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
[toolbar setShadowImage:[[UIImage alloc] init] forToolbarPosition:UIToolbarPositionAny];
  

Ответ №2:

Переопределите -drawRect: метод, как в вашем первом примере, но вместо рисования изображения используйте UIRectFill метод, подобный этому:

 [[UIColor blackColor] setFill];
UIRectFill(self.bounds);