Проводя экраны внутри TabView с GeometryReader не применяют анимацию слайдаIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Проводя экраны внутри TabView с GeometryReader не применяют анимацию слайда

Сообщение Anonymous »

Я новичок в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»