Самый простой вариант - нарисовать кривую в большом изображении, а затем поместить его в мозаику. Но если вы укладываете плитку, это, вероятно, означает, что изображение будет слишком большим, или вы просто нарисовали путь в первую очередь, верно?
Так что вам, вероятно, нужно разделить свой путь Самый простой подход - разделить его по элементам, используя CGPathApply
. Для каждого элемента вы можете установить его ограничивающий прямоугольник и определить, попадает ли этот элемент в ваши границы. Если нет, просто следите за последней конечной точкой. Если это так, то перейдите к последней конечной точке, которую вы видели, и добавьте элемент в новый путь для этой плитки. Когда вы закончите, каждая плитка будет рисовать свой собственный путь.
Технически вы будете «рисовать» вещи, которые выходят за ваши границы (например, линия, которая выходит за пределы плитки), но это намного дешевле, чем кажется. Core Graphics собирается очень просто обрезать отдельные элементы. Цель состоит в том, чтобы избежать вычисления элементов, которые вообще не находятся в вашей ограничительной рамке.
Обязательно кешируйте полученный путь. Вам не нужно рассчитывать путь для каждой плитки; только те, которые вы рисуете. Но не пересчитывайте его каждый раз, когда тянет плитка. Всякий раз, когда данные меняются, сбрасывать кэш. Если количество плиток очень велико, вы также можете использовать NSCache
, чтобы оптимизировать его еще лучше.