У меня есть пользовательский вид (унаследованный от UIView
) в моем приложении. Пользовательский вид переопределяетCGContextDrawLayerAtPoint работает медленно на iPad 3
- (void) drawRect:(CGRect) rect
Проблема заключается в следующем: drawRect:
выполняется во много раз длиннее на IPAD 3, чем на IPAD 2 (приблизительно 0,1 секунды на IPAD 3 и 0,003 секунды на IPad 2). Это примерно в 30 раз медленнее.
В принципе, я использую некоторые предварительно созданные слои и рисую их в drawRect:
. Последний звонок
CGContextDrawLayerAtPoint(context, CGPointZero, m_currentLayer);
занимает большую часть времени (около 95% от общего времени в drawRect:
)
Что может быть замедляя вещи так много, и как я должен исправить причину?
UPDATE:
Там нет ни одной темы, непосредственно участвующих. Я вызываю setNeedsDisplay:
в одном потоке, и drawRect:
получает вызов от другого, но это все. То же самое касается замков (не используются замки).
Представление перерисовывается в ответ на касания (это приложение для раскраски). На iPad 2 я получаю разумную задержку между касанием и обновлением экрана. Я хочу добиться того же на iPad 3.
Только предположение, но, возможно, тот факт, что ваши пиксели вдруг в четыре раза суммы есть что-то делать с ним (отображение сетчатки и все). – borrrden
@borrrden Я думаю, что вы правы, и на iPad 3 должно быть много работы, но весь процесс стал примерно в 30 раз медленнее. – Bobrovsky
Я не думаю, что кто-то может рисковать разумной догадкой только с этой информацией. Является ли какая-то часть этого использования несколькими потоками? Замки Mutex? И почему это проблема для вас? Часто ли просматривается ваш просмотр? Если да, то почему?DrawLayerAtPoint, вероятно, всегда будет самой тяжелой функцией (он также в моем приложении, хотя я использую iPad 2, поэтому я не могу ручаться за его скорость на третьем гене). – borrrden