Вы не должны рисовать внутри обратного вызова пользовательского интерфейса.Это замедлит или остановит отзывчивость пользовательского интерфейса, и у вас не будет надлежащего контекста рисования, если вы хотите рисовать непосредственно в UIView.
Вместо этого сохраните, запланируйте или поставьте в очередь информацию, необходимую для рисования на потом, либо в свой собственный контекст рисования растрового изображения, либо во время обратного вызова drawRect для этого вида.
В зависимости от требуемой частоты кадров,многим даже не нужно делать setNeedsDisplay для каждого события touchesMoved, но вы можете поставить в очередь данные и установить флаг для таймера скорости анимации или обратного вызова CADisplayLink для выполнения setNeedsDisplay с более постоянной скоростью (скажем, только 15 или 30 кадров в секунду),Это также поможет устранить лишние операции рисования.