Я новичок в Swiftui, и я экспериментирую с анимацией. Стиль анимации для моих вкладок в нижней части работает, как и ожидалось, когда я нажимаю на каждый значок, а также, если я проведу на экране, чтобы переключаться между вкладками. Но когда я пробую что -то похожее для моих лучших вкладок, анимация слайдов для перехода на выбранное цвет фона не работает, когда я проводю между вложенными экранами, она работает только тогда, когда я нажимаю на имя вкладки (кнопку). < /P>
Я нашел пост, который также имеет проблемы с анимацией, используя геометрию, но вкладка не совпадает. Используйте GeometryReader, это общие проблемы? Есть ли обходные пути для этой проблемы? Любое руководство о том, как решить это, очень ценится.import SwiftUI;
struct BottomTabs: View {
@Binding var tab: Int;
var body: some View {
HStack {
Button(action: {
withAnimation(.spring(response: 0.4, dampingFraction: 0.6)) {
tab = 0;
}
}) {
VStack {
Image(systemName: "baseball.fill").resizable()
.scaledToFit()
.frame(width: 16, height: 16)
.foregroundStyle(
LinearGradient(colors: [(tab == 0) ? .green : .white, (tab == 0) ? .purple : .white],
startPoint: .top, endPoint: .bottom)
).scaleEffect((tab == 0) ? 1.2 : 1)
.animation(.easeInOut(duration: 0.3), value: tab);
Circle()
.fill(.yellow)
.frame(width: (tab == 0) ? 5 : 0, height: (tab == 0) ? 5 : 0)
.padding(.top, (tab == 0) ? 2 : 0)
.opacity((tab == 0) ? 1 : 0)
.animation(.easeInOut(duration: 0.3), value: tab);
}
}.padding(.horizontal, 10)
Button(action: {
withAnimation(.spring(response: 0.4, dampingFraction: 0.6)) {
tab = 1;
}
}) {
VStack {
Image(systemName: "heart.fill").resizable()
.scaledToFit()
.frame(width: 16, height: 16)
.foregroundStyle(
LinearGradient(colors: [(tab == 1) ? .green : .white, (tab == 1) ? .purple : .white],
startPoint: .top, endPoint: .bottom)
)
.scaleEffect((tab == 1) ? 1.2 : 1)
.animation(.easeInOut(duration: 0.3), value: tab);
Circle().fill(.yellow)
.frame(width: (tab == 1) ? 5 : 0, height: (tab == 1) ? 5 : 0)
.opacity((tab == 1) ? 1 : 0)
.padding(.top, (tab == 1) ? 2 : 0)
.animation(.easeInOut(duration: 0.3), value: tab);
}
}.padding(.horizontal, 10)
Button(action: {
withAnimation(.spring(response: 0.4, dampingFraction: 0.6)) {
tab = 2;
}
}) {
VStack {
Image(systemName: "basketball.fill").resizable()
.scaledToFit()
.frame(width: 16, height: 16)
.foregroundStyle(
LinearGradient(colors: [(tab == 2) ? .green : .white, (tab == 2) ? .purple : .white],
startPoint: .top, endPoint: .bottom)
)
.scaleEffect((tab == 2) ? 1.2 : 1)
.animation(.easeInOut(duration: 0.3), value: tab);
Circle().fill(.yellow)
.frame(width: (tab == 2) ? 5 : 0, height: (tab == 2) ? 5 : 0)
.opacity((tab == 2) ? 1 : 0)
.padding(.top, (tab == 2) ? 2 : 0)
.animation(.easeInOut(duration: 0.3), value: tab);
}
}.padding(.horizontal, 10)
}.frame(height: 30)
.padding(.vertical, 20)
.padding(.horizontal, 30)
.background(
RoundedRectangle(cornerRadius: 20).fill(.black)
).padding(.bottom, 10);
}
}
contentview.swift
import SwiftUI;
struct ContentView: View {
@State private var tab: Int = 0;
@State private var tag: Int = 0;
var body: some View {
ZStack(alignment: .bottom) {
TabView(selection: $tab) {
NavigationStack {
ZStack(alignment: .top) {
TabView(selection: $tag) {
ScrollView(showsIndicators: false) {
LazyVStack {
ForEach(0..
Подробнее здесь: https://stackoverflow.com/questions/795 ... he-slide-a
Проводя экраны внутри TabView с GeometryReader не применяют анимацию слайда ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
SwiftUI TabView со стилем .page: GeometryReader minX не обновляется при прокрутке страницы
Anonymous » » в форуме IOS - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
SwiftUI TabView со стилем .page: GeometryReader minX не обновляется при прокрутке страницы
Anonymous » » в форуме IOS - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
GeometryReader с дочерним элементом выходит за пределы безопасной зоны с помощью SwiftUI
Anonymous » » в форуме IOS - 0 Ответы
- 73 Просмотры
-
Последнее сообщение Anonymous
-