Я пытаюсь реализовать анимацию, как показано ниже.

Начнем с того, что завершение является истинным или ложным, чтобы отобразить соответствующую форму (+ или ✓). При нажатии кнопки я бы хотел, чтобы фигуры анимировались, как показано на изображении выше. Насколько я понимаю:
[*]Если начинается с символа +: (1.) Непрозрачность горизонтальной обводки становится нулевой (2.) Верхняя часть вертикальной обводки перемещается от (midX, minY) к (minX, MidY) против часовой стрелки, чтобы сформировать левую черту символа ✓. Нижняя часть вертикального штриха остается фиксированной. Правая линия символа ✓ теперь анимируется от нижней части вертикальной линии в точке (midX, maxY) и распространяется в правый верхний угол до (maxX, minY), чтобы завершите форму. [*]Если начинается с символа ✓: (1.) Правая черта ✓ анимирует назад от (maxX, minY) до нижней точки (midX, maxY), где оба удара встречаются. (2.) Левая черта ✓ возвращается к (midX, minY), образуя вертикальную черту символа +. (3.) Наконец, горизонтальная черта символа + возвращается к непрозрачности 1. [*]Анимация фигур должна меняться при нажатии кнопки. Если пользователь быстро нажмет на кнопку, которая переключает состояние, тогда продолжительность анимации следует игнорировать, а фигуры должны просто переключаться между + и ✓, пока пользователь не отнимет нажатие кнопки; в этом случае, в зависимости от конечного состояния завершено, фигура, которая должна отображаться, должна продолжать анимироваться в поле зрения.
Изменить: обновлен код для использования различных форм сегментов линий. Однако правая черта символа ✓ не анимирует рисунок пути. Также анимация не меняет правильное направление при переключении между фигурами.
Любая помощь приветствуется.
struct LineSegment1: Shape { путь функции (в прямоугольнике: CGRect) -> Путь { вар путь = Путь() // MARK: + горизонтальная линия фигуры path.move(to: CGPoint(x: rect.minX, y: rect.midY)) path.addLine(to: CGPoint(x: rect.maxX, y: rect.midY)) Обратный путь } } структура LineSegment2: Форма { вар конечная точка: CGPoint var animatableData: AnimatablePair { получить { AnimatablePair(endPoint.x, endPoint.y) } набор { endPoint.x = новоезначение.первый endPoint.y = новоеЗначение.секунда } } // ОТМЕТКА: + вертикальная линия фигуры и
Мобильная версия