Подкласс UIView тянет фон несмотря на абсолютно пустой drawRect: - почему?

По-видимому, комментарий комментария felixthehat потребовал определенной репутации.

, Но я хотел бы к второму его призыв к триггерам События/Свойства... Триггерная платформа в WPF позволяет мне делать действительно мощные вещи как разработчику взаимодействия, не имея необходимость погружаться в код. Я пропускаю его.

10
задан Pascal 11 October 2009 в 17:52
поделиться

4 ответа

Простите за этот монолог. :)

Дело в том, что слой UIView явно рисует фон, который не зависит от drawRect: . Вот почему вы не можете избавиться от фона, переопределив drawRect: .

Вы можете либо переопределить слой - (void) drawLayer: (CALayer *) в контексте: (CGContextRef) ctx и заставьте слой рисовать все, что хотите, или вы переопределите - (void) setBackgroundColor: (UIColor *) newColor и не назначаете newColor для backgroundColor , но с вашим собственным ivar, например myBackgroundColor . Затем вы можете использовать myBackgroundColor в drawRect; чтобы нарисовать фон, как вам нравится.


Переопределение setBackgroundColor:

Определите переменную экземпляра для хранения цвета фона, например myBackgroundColor . В ваших методах инициализации установите реальный цвет фона на clearColor:

- (id) initWithCoder:(NSCoder *)aDecoder
{
    if ((self = [super init...])) {
        [super setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

Override:

- (void) setBackgroundColor:(UIColor *)newColor
{
    if (newColor != myBackgroundColor) {
        [myBackgroundColor release];
        myBackgroundColor = [newColor retain];
    }
}

Затем используйте myBackgroundColor в методе drawRect :. Таким образом, вы можете использовать цвет, назначенный из Interface Builder (или Xcode4) в вашем коде.

20
ответ дан 3 December 2019 в 14:25
поделиться

Это легко воспроизвести:

Создайте новое приложение для iPhone на основе просмотра. Создайте подкласс UIView и оставьте метод drawRect: полностью пустым. В Interface Builder перетащите UIView в главное представление, назначьте ему цвет фона и установите класс представления для своего подкласса. Сохраните, создайте и запустите, и увидите, в представлении отображается цвет фона.

Я обошел это поведение, переопределив setBackgroundColor: и назначив цвет своему собственному ivar, всегда оставляя свойство backgroundColor равным нулю. Это работает, однако мне все еще интересно, почему это работает именно так.

0
ответ дан 3 December 2019 в 14:25
поделиться
121 --- 1088039-

Я стесняюсь, чтобы предложить это, потому что я не хочу тебя обидеть Но вы установили непрозрачную в нет?

6
ответ дан 3 December 2019 в 14:25
поделиться

Вот более простое решение:

self.backgroundColor = [UIColor clearColor];
8
ответ дан 3 December 2019 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: