Почему прокрутка drawRect медленнее, чем UIImageView для больших изображений в пользовательском UITableViewCell - PullRequest
1 голос
/ 14 апреля 2011

У меня есть пользовательский UITableViewCell, смоделированный точно из пользовательских учебников UITableViewCell, найденных здесь - http://developer.apple.com/library/ios/#samplecode/AdvancedTableViewCells/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009111

и здесь - http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007318

Все отображается с использованием drawRect и скорость прокрутки составляет 55 FPS при рисовании 3 строк и 1 изображения. Изображение рисуется через -

[self.sampleImage drawInRect:CGRectMake(0, 0, 55, 55)];

Как ни странно, скорость прокрутки уменьшается до 25 кадров в секунду при рендеринге того же изображения, но в большей области

[self.sampleImage drawInRect:CGRectMake(0, 0, 320, 80)];

Я экспериментировал с большими изображениями в drawRect в примере кода Apple, и, конечно, частота кадров упала до 25 FPS.

Подвох в том, что FPS возвращается к 55, когда я рисую строки и отображаю изображение через UIImageVew.

  • Как можно рисовать большие изображения с помощью drawRect в UITableViewCell при сохранении скорости прокрутки 50 FPS?

  • Может ли UIImageView работать быстрее, чем рисование изображения в drawRect (для UITableViewCell)?

  • Есть ли какие-либо силы ГП против ЦП в игре?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

DrawRect будет использовать основную графику для рисования изображения на экране, где он использует процессор. если вы используете UIImageView, он будет использовать графический процессор, следовательно, он быстрее.

Решение состоит в том, чтобы не использовать drawRect.

Если вам абсолютно необходимо использовать drawRect, то вам может потребоваться нарисовать его перед прокруткой до некоторого места в кэше / кэшировать чертеж и использовать это изображение для UIImageView.

0 голосов
/ 15 апреля 2011

@ У darcwader есть это место. Я думаю, что причина, по которой во всех примерах используется drawRect, заключается в том, что изначально он дороже (для настройки ячеек), но впоследствии намного дешевле их анимировать. Однако для больших изображений их составление будет значительно более дорогостоящим, и если вы просматриваете несколько изображений, преимущества использования drawRect не реализуются.

...