Создавайте различные анимированные флажки с помощью Shapes и AnimatableData
Окно флажка RoundedRectangle
Для первого флажка начните с создания нового представления структуры и добавления к нему RoundedRectangle
. Используйте функцию stroke
и присвойте ей StrokeStyle
с шириной линии по вашему выбору:
Вставьте RoundedRectangle
в ZStack
и добавьте еще RoundedRectangle
, заполненный выбранным вами цветом. Убедитесь, что второй RoundedRectangle
меньше первого:
Объявите связывающую логическую переменную с именем checked
в верхней части представления структуры. Добавьте изображение галочки под вторым RoundedRectangle
внутри скобки условия, как показано ниже:
Теперь используйте ту же переменную checked
для управления цветами прямоугольников:
Объявите другую переменную для управления значением функции trim
первого RoundedRectangle
. Это значение будет анимировано. Поместите это значение в переменную animatableData
:
Измените значение to:
функции trim
на новую переменную trimVal
:
Вы закончили с CheckBoxView
. Внутри вашего ContentView
добавьте свой CheckBoxView
в качестве кнопки и передайте две переменные состояния (checked
и trimVal
):
Вам нужно изменить checked
и trimVal
внутри кнопки. Внутри withAnimation
присвойте trimVal
значение 1 и используйте toggle()
, чтобы изменить логическое значение checked
. Вы также можете добавить оператор else
, чтобы отменить анимацию:
Вместо кнопки можно использовать onTapGesture
. Это устранит мигание, которое вы получаете при нажатии кнопки:
Круговой CheckBox
Вы можете вернуться к своему CheckBoxView
и изменить форму на круг, как показано ниже:
Капсула CheckBox
У меня две капсулы, одна над другой. Давайте добавим две переменные: width
и removeText
. Переменная width
будет использоваться с рамками капсулы. Чтобы убедиться, что вторая капсула меньше первой, вычтите 10 из ширины. Наконец, добавьте текстовое представление внутри оператора if
, как показано ниже:
Внутри вашего ContentView
добавьте переменные removeText
и width
и измените код onTapGesture
на код ниже:
Все сделано! Спасибо за прочтение!