はじめに
今日からはアニメーションの部分に入っていきます。
宣言型シンタックスの強さはアニメーションの実装に十分伝わってくれました。
目次
Viewの切り替え
・CourseItem()
はZStack
に囲まれたことによって、複数のカードがある場合は重なっていくことになります。
・2枚目のカードがデフォルトの状態で表示させたくないため、状態を管理できるように@State
を足します。
struct CoursesView: View {
@State var show = false
var body: some View {
ZStack {
CourseItem()
.frame(width: 335, height: 250)
if show {
CourseItem()
}
}
}
}
・onTapGesture
を使って、Viewがtapされたら必要な処理を追加できます。ここはtureとfalseとの入れ替えを行います。
.onTapGesture {
show.toggle()
}
・以下のようにanimationはあんまりも突然現るので、animation
が持つeaseIn
を使えばスムーズになります。
.onTapGesture {
show.toggle()
}
.animation(.easeIn)
・もちろんanimationはカスタムができます。transiton()
にはmove
やslide
などを持ています。
・また、すでに違和感を感じているかもしれないが、もとのカードが消えるタイミングはちょっと遅れています。zIndex()
を使えば、重複するビューの表示順序を制御できます。
・animationはSafeAreaに含まれないため、全画面にしたいであればedgesIgnoringSafeArea(.all)
を使えます。
if show {
CourseItem()
// .transition(.slide)
.transition(.move(edge: .top))
.zIndex(1)
.edgesIgnoringSafeArea(.all)
}
まとめ
・コーディングよりも、Adobe XDを使ってデザインをやっている気分のようです。
ソースコードGithub