2010-09-23 3 views
5

Я создаю пользовательский UIControl, который отображает его вид через drawRect:. Я хочу использовать существующее свойство backgroundColor, чтобы разрешить настройку через Interface Builder. Однако, если установлен backgroundColor, к моменту вызова drawRect: весь прямоугольник уже заполнен. У меня opaque = NO и cleararsContextBeforeDrawing = YES. Если я установлю backgroundColor на clearColor, тогда я смогу отображать только те части, которые мне нужны.Нарисуйте частично прозрачный UIView при использовании backgroundColor

Как предотвратить автоматическое заполнение UIView всем прямоугольником с помощью backgroundColor?

Следует отметить, что пользовательский элемент управления размещен в Interface Builder, поэтому для создания экземпляра объекта используется метод initWithCoder :.

Это должно, конечно, можно, как если бы вы унаследовали от UIButton - который использует BackgroundColor - прямоугольник не был заполнен

ответ

1

Так как это пользовательский элемент управления, вы могли бы добавить переменную UIColor *myColor, и, в. init, после того, как он был прочитан из наконечника, установите myColor = self.backgroundColor и self.backgroundColor = [UIColor clearColor]? Затем, очевидно, используйте myColor в вашем drawRect.

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

2

Вы должны overide:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx; 

Здесь применяется цвет фона. Если вы хотите, чтобы представление обрабатывало цвет фона, вызовите метод drawLayer супер.