Вместо этого позволить drawRect
перерисовывать тысячи точек каждый раз, я думаю, что есть несколько способов «кэшировать изображение на экране» и любой дополнительный рисунок, который мы добавим к этому изображению, и просто покажем это изображение, когда оно будет время до drawRect
:
Используйте BitmapContext и нарисуйте растровое изображение, а в drawRect
нарисуйте это растровое изображение.
Используйте CGLayer
и нарисуйте CGLayer
в drawRect
, и это может быть быстрее, чем метод 1, так как это изображение кэшируется в графической карте (и это не будет учитываться при использовании ОЗУ для «предупреждения о памяти» на iOS?)
Нарисуйте CGImage
и используйте слой представления: view.layer.contents = (id) изображение;
Таким образом, кажется, есть три метода, и я думаю CALayer
в методе (3) может использовать только CGImage
для достижения этого. CALayer
сам по себе не может кэшировать изображение экрана, в отличие от CGLayer
в (2).
Является ли метод (2) самым быстрым из всех трех, и существуют ли другие методы, позволяющие это сделать? На самом деле я планирую анимировать несколько экранных изображений (зацикливая 5 или 6 из них) и попытаюсь использовать CADisplayLink
, чтобы попробовать максимальную частоту кадров 60 кадров в секунду.Будет ли любой из методов (1), (2) или (3) использовать память графической карты и, следовательно, не использовать ОЗУ и, следовательно, с меньшей вероятностью получить предупреждение о памяти от iOS?