Как я могу получить точный таймер продолжительности для изображения, которое отображается на экране? - PullRequest
0 голосов
/ 29 октября 2018

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

Допустим, я хочу, чтобы изображение отображалось на экране в течение примерно 150 мс. Я знаю, что большинство устройств iOS имеют переменную частоту обновления (обычно между 20-60 Гц), поэтому это будет означать, что невозможно достичь этих 150 мс. отлично на метке. Что я хотел бы знать, есть ли способ измерить точный интервал времени для отображаемого изображения? В идеале я бы хотел, чтобы это было с точностью до нескольких миллисекунд.

Заранее спасибо за любую помощь, которую я могу получить!

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если вы используете Metal, вы можете добавить блок «представленный обработчик», который будет вызываться при представлении рисованного элемента (показанного на экране). Используйте -addPresentedHandler: метод MTLDrawable, чтобы сделать это. В этом блоке вы можете запросить свойство presentedTime отрисовки.

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

В дополнение к этому вы можете запланировать представление рисунка на определенное время, используя -presentDrawable:atTime: (или, в зависимости от ваших потребностей, -presentDrawable:afterMinimumDuration:) метод MTLCommandBuffer.

0 голосов
/ 29 октября 2018

Вы должны посмотреть на использование CADisplayLink. Это таймер, который синхронизируется с циклом обновления экрана.

...