Как использовать .matchedgeMetryEffect в ScrollView, но поддерживайте положение прокруткиIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать .matchedgeMetryEffect в ScrollView, но поддерживайте положение прокрутки

Сообщение Anonymous »

Я пытаюсь использовать .matchedgeMetryEffect в ScrollView, и используя другие посты стеков, я выяснил, как это сделать, не видя никаких предупреждающих сообщений, таких как: < /p>

Код: Выделить всё

Multiple inserted views in matched geometry group Pair(first: "AB0D062C-C14D-4A2A-8AC4-32CE12AF289FText", second: SwiftUI.Namespace.ID(id: 136)) have isSource: true, results are undefined.
< /code>
Мне интересно, является ли вышеупомянутое сообщение серьезным, или это то, с чем можно жить. Он связывается с анимацией, но не так сильно, как проблема ниже. Сопоставленная группа геометрии "для условного рендеринга? Это проблема. Я хочу сохранить свой анимированный переход, но также сохранить позицию прокрутки, когда я увольняю обратно к основному представлению. Зеленый квадрат - это 3 -й квадрат в прокрутке, и при увольнении вы можете увидеть красную квадрат за ним, который, как оказался 1 -й квадрат. Их, я чувствую, что должен сделать выбор между анимацией или позицией прокрутки.  < /p>
Это все мой код: < /p>
 struct Home: View {
@State private var colorStructs: [ColorStruct] = [
ColorStruct(color: .red),
ColorStruct(color: .blue),
ColorStruct(color: .green),
ColorStruct(color: .yellow)
]

@Namespace private var resultsNamespace
@State private var isPressed: Bool = false
@State var selectedColor: ColorStruct? = nil

@State private var scrollPosition: String? = nil // Track scroll position
@State private var lastScrollPosition: String? = nil // Save last position

var body: some View {
ZStack {
if !isPressed {
VStack {
ScrollView(.horizontal) {
LazyHStack(spacing: 0) {
ForEach(colorStructs, id: \.id) { color in
RoundedRectangle(cornerRadius: 25)
.fill(color.color.gradient)
.matchedGeometryEffect(id: color.id + "Color", in: resultsNamespace)
.padding(.horizontal, 15)
.containerRelativeFrame(.horizontal)
.overlay {
Text("\(color.id)")
.matchedGeometryEffect(id: color.id + "Text", in: resultsNamespace)
.padding(.horizontal)

}
.onTapGesture {
selectedColor = color
lastScrollPosition = scrollPosition
withAnimation(.spring(response: 0.6, dampingFraction: 0.8)) {
isPressed.toggle()
}
}
.id(color.id)
}
}
.scrollTargetLayout()
}
.scrollPosition(id: $scrollPosition)
.scrollTargetBehavior(.viewAligned)
.scrollIndicators(.hidden)
.frame(height: 250)
.safeAreaPadding(.vertical, 15)
.safeAreaPadding(.horizontal, 25)
}
}

if isPressed {
ExpandedView(
colorStruct: selectedColor ?? ColorStruct(color: .red),
dismiss: $isPressed,
namespace: resultsNamespace,
onDismiss: {
if let lastPos = lastScrollPosition {
scrollPosition = lastPos
}
}
)
}

}
.navigationTitle("Custom Indicator")
}
}

struct ExpandedView: View {
let colorStruct: ColorStruct
@Binding var dismiss: Bool
var namespace: Namespace.ID
var onDismiss: () -> Void

var body: some View {
ZStack {
RoundedRectangle(cornerRadius: 25)
.matchedGeometryEffect(id: colorStruct.id + "Color", in: namespace, isSource: false)
.frame(height: 550)
.foregroundStyle(colorStruct.color)

VStack {
Text("\(colorStruct.id)")
.matchedGeometryEffect(id: colorStruct.id + "Text", in: namespace, isSource: false)
.font(.largeTitle)
.fontWeight(.bold)
.offset(y: -150)
.padding(.horizontal)
}
}
.onTapGesture {
withAnimation(.spring(response: 0.6, dampingFraction: 0.8)) {
dismiss.toggle()
onDismiss()
}
}
.padding()
}
}
Я пробовал другие вещи, такие как использование Zindex () в каждом представлении и изменение Issource в MatchedgeMetryEffect, но это либо не онизило, либо имела ту же проблему, что и выше. /> Желаемое поведение: я бы хотел, чтобы анимация квадрата расширилась, а также сохраняла положение прокрутки, когда я оставлю вид дома. < /p>

Подробнее здесь: https://stackoverflow.com/questions/796 ... roll-posit
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Swiftui: MatchEdgeMetryEffect и Animation Animation Clipshape
    Anonymous » » в форуме IOS
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Swiftui Scrollview игнорирует положение прокрутки при добавлении элемента в начале
    Anonymous » » в форуме IOS
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • WinUI 3 ListView (или ScrollView) внутри ScrollView
    Anonymous » » в форуме C#
    0 Ответы
    111 Просмотры
    Последнее сообщение Anonymous
  • WinUI 3 ListView (или ScrollView) внутри ScrollView
    Anonymous » » в форуме C#
    0 Ответы
    112 Просмотры
    Последнее сообщение Anonymous
  • «TextView» внутри «ScrollView» прекращает прокрутку при прокрутке родительского «ScrollView».
    Anonymous » » в форуме Android
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous

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