Я рисую содержимое в UITableViewCell, и он работает хорошо, но я пытаюсь понять, есть ли лучший способ сделать это.Оптимизация чертежа на UITableViewCell
Каждая ячейка имеет следующие компоненты:
- миниатюр на левой стороне - может прийти от сервера, так он загружен асинхронной
- строка заголовка - переменной длины, чтобы каждая ячейка может быть разной высоты
- Строка метки времени
- Градиентный фон - градиент идет от верхней части ячейки до нижней части и является полупрозрачным, чтобы цвета фона блестели с помощью блеска
В настоящее время работает хорошо. Рисунок происходит следующим образом:
UITableViewController inits/повторно использует ячейку, наборы необходимых данных, и вызывает
[клеток setNeedsDisplay]
клетка имеет CALayer для миниатюры - thumbnailLayer
В ячейке drawRect он рисует фон градиента и две строки
В drawRect ячейки затем вызывает setIcon - который получает миниатюру и задает изображение как содержимое файла thumbnailLayer. Если изображение не найдено локально, оно устанавливает загрузочное изображение в виде содержимого эскиза и асинхронно получает миниатюру. После того, как эскиз получен, он сбрасывается вновь & вызова SetIcon сбрасывает thumbnailLayer.contents
Все это в настоящее время работает, но используя инструменты я вижу, что эскиз композитинга с градиентом. Я попытался следующие, чтобы исправить это:
установки backgroundView ячейки на вид которой DrawRect бы сделать градиент так, чтобы DrawRect ячейки может нарисовать эскиз и использование setNeedsDisplayInRect позволит мне только перерисовывать миниатюру после он загрузился --- но это привело к рисованию (градиенту) backgroundView, покрывающему рисунок (текст) ячейки.
Я бы просто нарисовал миниатюру в drawRect ячейки, но когда вызывается setNeedsDisplay, drawRect просто накладывает другое изображение, и изображение загрузки может отображаться. Я бы очистил прямоугольник, но тогда мне пришлось бы перерисовать градиент.
Я попытался бы нарисовать градиент в CAGradientLayer и сохранить ссылку на него, поэтому я могу быстро перерисовать его, но я решил, что мне придется перерисовать градиент, если высота ячейки изменится.
Любые идеи? Я уверен, что я что-то упустил, поэтому любая помощь будет отличной.
Bump - у кого есть идеи для этого?