Я новичок в 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
Программируем под IOS
1744199036
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);
}
}
[b] contentview.swift[/b]
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..
Подробнее здесь: [url]https://stackoverflow.com/questions/79526381/swiping-screens-inside-a-tabview-with-a-geometryreader-doesnt-apply-the-slide-a[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия