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