Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOS 曜日ランキングが出来上がるまで

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for tokizo tokizo
September 19, 2024
2.5k

iOS 曜日ランキングが出来上がるまで

Avatar for tokizo

tokizo

September 19, 2024
Tweet

Transcript

  1. 横方向に無限スクロールして曜日を変更 19 • 横方向のスクロール ◦ SwiftUI ✅ ◦ ScrollView(.horizontal) ◦

    ページングを素朴に実装すると親要素の縦スクロールと競合 ▪ 素朴: .gesture(_:including:) ▪ → .simultaneousGesture(_:including:) と DragGesture(minimumDistance:) を使い、 縦横スクロールの競合をハンドリング
  2. 横方向に無限スクロールして曜日を変更 21 • 無限スクロール ◦ SwiftUI ✅ ◦ .onChange(of:perform:) で選択中の曜日を

    監視し、特定の曜日間の移動を特別扱い ▪ 最初の曜日から左の曜日へ: 最後の曜日に移動 ▪ 最後の曜日から右の曜日へ: 最初の曜日に移動
  3. SwiftUI 版の課題 26 • 表示が崩れる • 加えて、操作感が良くない ◦ 横スクロールの手触りが悪く、反応が悪い ▪

    なめらかさを感じない ◦ 横スクロールをしたつもりが親要素の縦スクロールが 優先される時があった ▪ 公開されている値で調整しても満足感は得られなかった
  4. 要件は満たせたか? (1/2) 34 • 曜日ごとの作品数に応じて高さを変更 ◦ → SwiftUI で作った時と同じ処理 ▪

    各曜日は SwiftUI.View から変更無し ▪ > GeometryReader で曜日ごとの高さを取得し、 曜日変更毎に全体の高さとして適用 ◦ 細かな不具合の対応も複数行った ▪ スクロール中に高さを変更するとパフォーマンスが落ちる等
  5. 最終的な構成 • ホーム画面 SwiftUI.ScrollView ◦ 曜日ランキング SwiftUI.View ▪ ヘッダー SwiftUI.View

    ▪ 全曜日 UIViewControllerRepresentable • UIPageViewController ◦ 各曜日 UIHostingController ▪ SwiftUI.View 36
  6. まとめ • 曜日ランキングとは ◦ → 曜日ごとにランキング形式で連載作品を表示 • 最初の実装方針と出くわした課題 ◦ →

    SwiftUI だけで作るとパフォーマンスが悪かった • 課題に対するアプローチ ◦ → UIPageViewController を使うことで課題を解消できた 37