Я работаю над приложением, которое рисует на экране, основываясь на информации, полученной по сети.Моя проблема в том, что иногда эти события приходят со скоростью выше, чем я могу нарисовать, и я испытываю задержку.Теперь проблема не в задержке, а в типе задержки.Если бы я рисовал на основе таких событий, как щелчок мышью и перетаскивание, этого не произойдет, и я предполагаю, что это из-за способа доставки событий.Как я мог узнать, когда представление «готово» к рисованию снова, потому что тогда я мог бы отбросить некоторые события, полученные по сети, и нарисовать только самые последние.
Прямо сейчас у меня есть прозрачное окно, которое находится на «вершине» иерархии окон.Я рисую на NSImage, который является размером экрана, и после каждой операции рисования я делаю setneedsdisplayinrect вызов вида, в котором происходит рисование.Когда я получаю вызов drawdraw, я рисую часть изображения, которая включена в грязный прямоугольник.Моя попытка решить эту проблему - что-то вроде хака, поскольку я не знаю другого способа сделать это.Я устанавливаю логическое значение true после каждого setneedsdisplayinrect и устанавливаю его в false в drawrect.Если я получаю последующее событие для рисования на изображении, я просто игнорирую его, если для Boolean установлено значение true.
Какие еще варианты у меня есть?
Я думал о том, чтобы использовать кеш-слои и изменять их путь, но я не уверен, насколько эффективными становятся слои формы, когда путь становится большим.Я также подумал об использовании нескольких слоев фигур для разных частей пути, которые разделены (не непрерывно), но если я хочу очистить чертеж и удалить слои, если их много, я заметил некоторое снижение производительности.Единственный другой способ, которым я мог придумать, - это рисование с открытым gl, но, учитывая природу представления OpenGL (размер экрана и прозрачность), я не уверен, насколько это будет связано с производительностью.
Любые советы будут с благодарностью.
Спасибо.