Вы можете использовать CADisplayLink, который вызывается при каждом обновлении экрана.
let displayLink = CADisplayLink(target: self, selector: #selector(drawFunction(displayLink:)))
displayLink.add(to: .main, forMode: .commonModes)
В drawFunction (или предикате и т. Д.) Мы можем вычесть тики. Когда они достигают 0, мы достигли 50-го кадра и аннулируем displayLink.
var ticks = 50
@objc private func drawFunction(displayLink: CADisplayLink) {
doSomething()
ticks -= 1
if ticks == 0 {
displayLink.invalidate()
displayLink = nil
return
}
}
CADisplayLink также может указывать количество времени между кадрами. Подобное обсуждение можно найти здесь . Если вы беспокоитесь об абсолютной точности, вы можете рассчитать время между кадрами. Из документов:
Свойство duration обеспечивает интервал времени между кадрами в MaximumFramesPerSecond. Чтобы вычислить фактическую продолжительность кадра, используйте targetTimestamp - timestamp. Вы можете использовать это значение в своем приложении для расчета частоты кадров дисплея, приблизительного времени, в течение которого будет отображаться следующий кадр, и для настройки поведения при рисовании так, чтобы следующий кадр был подготовлен вовремя для отображения.