Я использую CGContextMoveToPoint + CGContextAddLineToPoint + CGContextStrokePath в моем приложении. одна точка на экранную точку для рисования с использованием предварительно рассчитанного резервного буфера для обзора. буфер содержит точные точки для рисования и использует интерполированное представление сигнала (в зависимости от масштаба / масштаба). хотя это могло бы быть быстрее и выглядеть лучше, если бы я рендерился в буфер изображений, у меня никогда не было жалоб. Вы можете вычислить и визуализировать все это из вторичного потока, если настроите его правильно.
сглаживание относится к графическому контексту.
CGFloat (собственный ввод для CGPaths) является излишним для обзора, в качестве промежуточного представления и для расчета обзора формы сигнала. 16 бит должны быть адекватными. конечно, вам придется конвертировать в CGFloat при переходе на вызовы CG.
вам нужно профилировать, чтобы узнать, на что тратится ваше время - сосредоточьтесь на деталях, которые занимают больше всего времени. Кроме того, убедитесь, что вы рисуете только то, что должны, когда это необходимо, и избегайте наложения / анимации, где это возможно. если вам нужны оверлеи, лучше сделать рендеринг в изображение / буфер и обновить его по мере необходимости. иногда это помогает разбить изображение на несколько поверхностей для рисования, когда поверхность большая.
semi-OT: использование значений s + h в умении может быть немного быстрее, но ... я очень предпочитаю его в качестве опции. если ваша реализация использует линейную интерполяцию (что, возможно, зависит от ее внешнего вида), рассмотрите более интуитивный подход. Линейная интерполяция немного обманывает, и совсем не то, что пользователь ожидал бы, если вы разрабатываете профессиональное приложение.