#ios #swiftui #transition
Вопрос:
Как у меня может быть наложенный вид в SwiftUI с разным переходом на разных участках? Например, в моем конкретном примере я хочу добиться следующего:
- один подвид вида наложения скользит снизу
- другое подвидо вида наложения вообще не имеет перехода (появляется мгновенно)
- фон наложения не скользит снизу, а исчезает
Я уже перепробовал всевозможные вещи, и, похоже, мне нужно установить анимацию и переход в представлении, которое обертывает if showOverlay
условие. Однако, похоже, что все модификаторы .transition()
и .animation()
, установленные в подвидах наложения, игнорируются.
Возможно ли это на самом деле? Следующий код-это то, что, как я думал, должно несколько работать, но, по-видимому, совсем не работает:
// any observable external variable, that enables / disables the overlay
@State showOverlay: bool = false
// surrounding view
VStack { /* .. */ }
.frame(maxWidth: .infinity, maxHeight: .infinity)
.overlay(
Group {
if showOverlay {
Overlay()
}
}
)
// overlay view
struct Overlay: View {
var body: some View {
VStack {
// style 1
Text("OverlayContent that slides in from bottom")
.transition(.move(edge: .bottom).combined(with: .opacity))
.animation(.easeInOut(duration: 0.28))
// style 2
Text("OverlayContent that appears instant")
.animation(nil)
}
.background( // style 3
Color.black.opacity(0.2)
.ignoresSafeArea()
.transition(.opacity) // <-- background should not slide up but fade in
)
}
}
Комментарии:
1. Переход работает, когда появляется или исчезает явное представление (с модификатором перехода)… любой родитель, дети или брат или сестра не имеют к этому отношения.
2. Таким образом, тот вид анимации, который я ищу, просто невозможен, за исключением того, что я каким-то образом создаю каждый элемент, имеющий
.transition
внутри свой собственный условный блок?