ios 4 setBackgroundColor не вызывается drawRect

#ios4 #uicolor #cs193p

#ios4 #пользовательский цвет #cs193p

Вопрос:

Это, вероятно, простой вопрос, но я действительно не могу на него ответить.

Я завершил одно из демонстрационных приложений, показанных в классе CS193p. По сути, это очень простое представление с пользовательским подвидом и пользовательским подвидом, которое выполняет некоторую отрисовку в зависимости от значения ползунка. (Это смайлик, довольно круто!)

Я решил добавить протокол делегирования к пользовательскому представлению, который возвращает объект UIColor, чтобы, когда ползунок делал лицо счастливым, он также менял фон представления с красного на зеленый.

Это работает нормально, но фон начинается как белый! Как только я касаюсь ползунка, стрелка становится красной и работает нормально… но он начинается как БЕЛЫЙ?! Почему?!!

Ответ №1:

Не видя вашего кода, я бы предположил, что цвет фона устанавливается в файле nib. Если вы не используете Interface Builder, есть вероятность, что значение по умолчанию для фона белое, но я не уверен в этом.

Я бы проверил ваш файл nib и посмотрел, на какой цвет фона установлен в представлении. кроме того, я бы установил цвет фона для представления в вашем методе viewDidLoad таким, каким вы хотите, чтобы он начинался.

Не стесняйтесь публиковать часть своего кода, если я сильно отклоняюсь от базы…

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

1. Привет, MobileVet, спасибо за ваш ответ. На самом деле у меня ранее был установлен другой цвет фона (синий), но затем я решил реализовать эффект преобразования красного в зеленый в качестве упражнения для понимания делегирования. Я попытался вернуть ему значение «по умолчанию» в Interface builder, и я получаю поведение, о котором я упоминал ранее, оно начинается как белое. Это просто немного расстраивает, потому что у меня есть метод, который окрашивает фон в красный цвет в качестве последнего вызова в методе drawRect моего представления. Он должен во что бы то ни стало выполнить этот вызов и покрасить его в красный цвет! Это, очевидно, работает, поскольку мой смайлик отображается с грустной улыбкой.

2. Хм, я думаю, что я в недоумении, не видя какого-либо кода. Извините.

Ответ №2:

Цвет фона изначально белый, потому что изменение backgroundcolor не приводит к немедленному изменению цвета. Цвет изменяется при следующем перерисовывании вида, например, при перемещении ползунка.