Cocoa-Touch: при реализации drawRect, как вы перерисовываете прозрачный фон? - PullRequest
1 голос
/ 26 октября 2009

Я реализую метод drawRect из UIView (точнее, UITableViewCell).
Мое представление имеет прозрачный фон, поэтому, когда что-то изменяется в представлении, старая нарисованная версия все еще остается там. Поэтому, если в первом drawRect нарисовать «A», а затем «B» в одной и той же точке, я получу их обоих нарисованными друг над другом.

Как мне сказать фреймворку перерисовать фон?
(что, я полагаю, этого не делает, потому что это не всегда нужно, но в этом случае это плохо)

Полагаю, мне нужен эквивалент invalidateRect win32, однако я прошел через членов UIViews и ничего не нашел.

Кстати, я пробовал setNeedsDisplay, это не помогло.

Ответы [ 5 ]

5 голосов
/ 27 октября 2009

Я думаю, что использовал для этого CGContextClearRect(CGContextRef context, CGRect rect).

0 голосов
/ 27 октября 2009

Возможно, вы пришли из мира Windows, что вы думаете о проблеме неправильно. Придя также из мира Windows, я много раз делал то же самое. Почему вам нужно переопределить drawRect? Всякий раз, когда вы делаете это, вы несете ответственность за все. Можно ли сделать то, что вы хотите по-другому? Что вы рисуете в drawRect? Можете ли вы просто добавить подэлементы или подслои в свою ячейку?

Кстати, вы вызываете [super drawRect: rect] в начале переопределения drawRect?

0 голосов
/ 26 октября 2009

Интересно, если, поскольку это ваш собственный вид, который сохраняет чертеж, должны ли вы сами стереть переданный прямоугольник?

Что произойдет, если ваш фон не будет прозрачным?

0 голосов
/ 26 октября 2009

Я больше не использую клетки.

Это работает для меня, потому что у меня всегда есть <20 клеток в моем столе. Думаю, это решение не для всех, но я собираюсь пойти по этому пути. </p>

Вместо того, чтобы инфраструктура создавала и повторно использовала 10ish ячеек, я создаю свои 20 при извлечении данных для них, а позже во время отображения все становится более плавным, потому что их не нужно каждый раз настраивать заново. 1005 *

0 голосов
/ 26 октября 2009

Вы должны установить clearsContextBeforeDrawing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...