Я пытаюсь создать анимированный градиент в стиле «флаг» поверх моего профиля пользователя — вроде того, что есть здесь в Stripe: https://stripe.com/gb
Приведенный ниже код переключает внешний вид градиента при переключении/выключении страницы, содержащей это представление, но не анимирует его, когда страница открыта. Как это настроить, чтобы создать необходимую анимацию.
import SwiftUI
struct UserProfileHeaderView: View {
let plan: String
let headerTitle: String
let greeting: String
let planDescription: String
var isTrailingTitle: Bool
let description: String
@State private var animateGradient = false
var body: some View {
let startColor = plan == "Classic" ? Color.purple : plan == "Plus" ? Color.red : Color(hex: "#636363")
let endColor = plan == "Classic" ? Color.blue : plan == "Plus" ? Color.orange : plan == "Ultimate" ? Color(hex: "#010057") : Color(hex: "#636363")
let gradient = LinearGradient(
gradient: Gradient(colors: [startColor, endColor]),
startPoint: animateGradient ? .topLeading : .bottomTrailing,
endPoint: animateGradient ? .bottomTrailing : .topLeading
)
VStack(alignment: .leading, spacing: 8) {
HStack {
if !isTrailingTitle {
TextInfinity(text: headerTitle)
.font(.largeTitle)
.foregroundColor(.white)
.fontWeight(.bold)
.padding()
.frame(maxWidth: .infinity, alignment: .leading)
} else {
Spacer()
TextInfinity(text: headerTitle)
.font(.largeTitle)
.foregroundColor(.white)
.fontWeight(.bold)
.padding()
.frame(maxWidth: .infinity, alignment: .trailing)
}
}
HStack {
if !isTrailingTitle {
TextInfinity(text: greeting)
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
.padding(.leading)
} else {
Spacer()
TextInfinity(text: greeting)
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
.padding(.leading)
.padding(.trailing)
}
}
HStack {
if !isTrailingTitle {
TextInfinity(text: description)
.font(.title3)
.foregroundColor(.white)
.padding(.leading)
} else {
Spacer()
TextInfinity(text: description)
.font(.title3)
.foregroundColor(.white)
.padding(.leading)
.padding(.trailing)
}
}
HStack {
Spacer()
TextInfinity(text: plan == "none" ? "NOT SUBSCRIBED" : planDescription.uppercased())
.font(.headline)
.fontWeight(.bold)
.foregroundColor(.white)
.padding([.trailing, .bottom], 10)
}
}
.padding(.top, 35)
.frame(maxWidth: .infinity)
.background(gradient)
.padding(.horizontal, 0)
.padding(.vertical, 20)
.ignoresSafeArea()
.onAppear {
withAnimation(Animation.easeInOut(duration: 2).repeatForever(autoreverses: true)) {
animateGradient.toggle()
}
}
}
}
// Preview Provider
struct UserProfileHeaderView_Previews: PreviewProvider {
static var previews: some View {
UserProfileHeaderView(
plan: "Classic",
headerTitle: "Your Profile",
greeting: "Welcome!",
planDescription: "Classic Plan",
isTrailingTitle: false,
description: "\( DeveloperPreview.shared.user.name ?? "")\(( DeveloperPreview.shared.user.name != nil && DeveloperPreview.shared.user.name != "") ? " | " : "")\( DeveloperPreview.shared.user.email)"
)
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... n-swift-ui
Анимированный градиентный фон в Swift UI ⇐ IOS
Программируем под IOS
1716654997
Anonymous
Я пытаюсь создать анимированный градиент в стиле «флаг» поверх моего профиля пользователя — вроде того, что есть здесь в Stripe: https://stripe.com/gb
Приведенный ниже код переключает внешний вид градиента при переключении/выключении страницы, содержащей это представление, но не анимирует его, когда страница открыта. Как это настроить, чтобы создать необходимую анимацию.
import SwiftUI
struct UserProfileHeaderView: View {
let plan: String
let headerTitle: String
let greeting: String
let planDescription: String
var isTrailingTitle: Bool
let description: String
@State private var animateGradient = false
var body: some View {
let startColor = plan == "Classic" ? Color.purple : plan == "Plus" ? Color.red : Color(hex: "#636363")
let endColor = plan == "Classic" ? Color.blue : plan == "Plus" ? Color.orange : plan == "Ultimate" ? Color(hex: "#010057") : Color(hex: "#636363")
let gradient = LinearGradient(
gradient: Gradient(colors: [startColor, endColor]),
startPoint: animateGradient ? .topLeading : .bottomTrailing,
endPoint: animateGradient ? .bottomTrailing : .topLeading
)
VStack(alignment: .leading, spacing: 8) {
HStack {
if !isTrailingTitle {
TextInfinity(text: headerTitle)
.font(.largeTitle)
.foregroundColor(.white)
.fontWeight(.bold)
.padding()
.frame(maxWidth: .infinity, alignment: .leading)
} else {
Spacer()
TextInfinity(text: headerTitle)
.font(.largeTitle)
.foregroundColor(.white)
.fontWeight(.bold)
.padding()
.frame(maxWidth: .infinity, alignment: .trailing)
}
}
HStack {
if !isTrailingTitle {
TextInfinity(text: greeting)
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
.padding(.leading)
} else {
Spacer()
TextInfinity(text: greeting)
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
.padding(.leading)
.padding(.trailing)
}
}
HStack {
if !isTrailingTitle {
TextInfinity(text: description)
.font(.title3)
.foregroundColor(.white)
.padding(.leading)
} else {
Spacer()
TextInfinity(text: description)
.font(.title3)
.foregroundColor(.white)
.padding(.leading)
.padding(.trailing)
}
}
HStack {
Spacer()
TextInfinity(text: plan == "none" ? "NOT SUBSCRIBED" : planDescription.uppercased())
.font(.headline)
.fontWeight(.bold)
.foregroundColor(.white)
.padding([.trailing, .bottom], 10)
}
}
.padding(.top, 35)
.frame(maxWidth: .infinity)
.background(gradient)
.padding(.horizontal, 0)
.padding(.vertical, 20)
.ignoresSafeArea()
.onAppear {
withAnimation(Animation.easeInOut(duration: 2).repeatForever(autoreverses: true)) {
animateGradient.toggle()
}
}
}
}
// Preview Provider
struct UserProfileHeaderView_Previews: PreviewProvider {
static var previews: some View {
UserProfileHeaderView(
plan: "Classic",
headerTitle: "Your Profile",
greeting: "Welcome!",
planDescription: "Classic Plan",
isTrailingTitle: false,
description: "\( DeveloperPreview.shared.user.name ?? "")\(( DeveloperPreview.shared.user.name != nil && DeveloperPreview.shared.user.name != "") ? " | " : "")\( DeveloperPreview.shared.user.email)"
)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78532199/animated-gradient-background-in-swift-ui[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия