Часть 7 серии диаграмм

Когда я написал первую часть о рисовании круговой диаграммы в SwiftUI 2.0, я хотел, чтобы она была краткой. Серия гистограмм заняла три статьи, и я хотел быстрее перейти к решению. Но я ошибаюсь — рисование пирогов сопряжено с трясиной конфликтов. Это точно был не кусок пирога. И вот мы на версии 4. Что сработало, а что нет, и действительно ли это окончательный отсчет.

Трясина конфликтов

Пирог V1

Версия 1 была хорошо принята, мой редактор подумал, что она великолепна, и он хороший судья :), но, честно говоря, нет, в брутальной игре было место для улучшения. Я сосредоточился на рисовании кусочков круга и использовал наблюдаемый объект для хранения данных/внесения изменений. Это работало хорошо, но я не был доволен конечным результатом, так как он слишком сильно дрожал для комфорта — я думал, что смогу сделать лучше.

Пирог V2

В версии 2 пирога я удалил наблюдаемый объект. Проблема заключалась в том, что мне нужно было обновить несколько частей, прежде чем выполнять обновление представления. Требование, которое не собиралось работать с опубликованной переменной. В этой версии я представил вторую структуру для хранения цветовой схемы и использовал ее для анимации рисования частей по частям. Я также изменил обновление экрана на ручное обновление с использованием тега id в SwiftUI. Это было хорошо, но перерисовывать каждый раз было слишком медленно, и при каждом проходе возникали вспышки белого цвета. Отбросив наблюдаемый объект, мне также понадобился другой способ управления им. Управление Я предпочитаю тренироваться с помощью Combine Framework.

Пирог V3

Я использовал многое из того, чему научился в версии 2, включая структуру объединения для перерисовки круговой диаграммы, только на этот раз я не начинал с нуля каждый раз, когда просто просматривал существующую круговую диаграмму. Использование кадра объединения также слегка изменилось в этой версии, поскольку я также использовал его для идентификации различных срезов. Результаты сработали хорошо, только с двумя недостатками. Во-первых, он был ужасно медленным, а во-вторых, я мог только увеличивать его в размерах, удаление кусочка приводило к его краху. Говоря о сбое, он в конечном итоге все равно вылетит, если вы добавите слишком много кусочков пирога. Два непростительных этажа.

Пирог V4 [Этот]

Окончательная версия, нет, я боюсь, что всем уже надоели круговые сборки на V3. Практически говоря, я снова сделал шаг назад и подумал о том, что имеет смысл для пирога. А пирог с более чем 32 кусочками — нет, поэтому я сделал это как ограничение. Уменьшение количества деталей также сильно повлияло на скорость, на этот раз я мог комфортно работать в режиме реального времени. Я отказался от второй структуры и просто использовал представления SwiftUI 2.0 с исходной структурой, которую я определил. Я снова воспользовался комбинационной структурой, чтобы собрать все воедино, управлять рисованием и всем содержимым круговой диаграммы. В версии я также могу удалять части или даже добавлять их навсегда без сбоев. Это идеальный пирог, пирог, который, как говорится, превосходит все другие пироги.

Но достаточно сказать, вот код для идеального пирога.

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







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

Сохраняйте спокойствие, продолжайте кодировать.