Код: Выделить всё
struct BannerModifier: ViewModifier {
@Binding var model: BannerData?
func body(content: Content) -> some View {
content.overlay(
Group {
if model != nil {
VStack {
HStack(alignment: .firstTextBaseline) {
Image(systemName: "exclamationmark.triangle.fill")
VStack(alignment: .leading) {
Text(model?.title ?? "")
.font(.headline)
if let message = model?.message {
Text(message)
.font(.footnote)
}
}
}
.padding()
.frame(minWidth: 0, maxWidth: .infinity)
.foregroundColor(.white)
.background(.red)
.cornerRadius(10)
.shadow(radius: 10)
Spacer()
}
.padding()
.animation(.easeInOut)
.transition(AnyTransition.move(edge: .top).combined(with: .opacity))
.onTapGesture {
withAnimation {
model = nil
}
}
.gesture(
DragGesture()
.onChanged { _ in
withAnimation {
model = nil
}
}
)
}
}
)
}
}
struct BannerData: Identifiable {
let id = UUID()
let title: String
let message: String?
}

При касании я стираю модель, но она не анимируется. Только сразу скрывается. Как я могу анимировать его, чтобы он скользил вверх, что противоположно тому, как он скользит вниз при отображении? Было бы очень здорово, если бы я мог сделать жест перетаскивания интерактивным, чтобы можно было перемещать его, как собственные уведомления.
Подробнее здесь: https://stackoverflow.com/questions/658 ... in-swiftui
Мобильная версия