はじめに
こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 25 日目の記事です。
ついに最終日です!!もうリリースできる状態ではあるのですがふと思いました。個人開発なのに遊びがなくないか?と。
そこで最後にイースターエッグぽいのを実装したいと思います。
実装
PageView.swift ファイルを作成して下記のように実装します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import SwiftUI struct PageView: UIViewControllerRepresentable { var pages: [AnyView] func makeUIViewController(context: Context) -> UIPageViewController { let pageViewController = UIPageViewController(transitionStyle: .pageCurl, navigationOrientation: .horizontal) pageViewController.dataSource = context.coordinator return pageViewController } func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) { pageViewController.setViewControllers([context.coordinator.controllers.first!], direction: .forward, animated: false) } func makeCoordinator() -> Coordinator { return Coordinator(parent: self) } class Coordinator: NSObject, UIPageViewControllerDataSource { private var parent: PageView var controllers: [UIViewController] private func validIndex(_ index: Int) -> Int? { if controllers.count > index && index >= 0 { return index } return nil } init(parent: PageView) { self.parent = parent self.controllers = parent.pages.map { UIHostingController(rootView: $0) } } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { guard let currentIndex = controllers.firstIndex(of: viewController), let index = validIndex(currentIndex + 1) else { return nil } return controllers[index] } func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { guard let currentIndex = controllers.firstIndex(of: viewController), let index = validIndex(currentIndex - 1) else { return nil } return controllers[index] } } } |
任意のアイコンを追加して RegisterView を下記のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// 背景色のColor.screenBackgroundの下に追加 if items.isEmpty { // 操作の邪魔はしたくないのでリストが追加されたら非表示 easterEgg } private var easterEgg: some View { VStack { Spacer().frame(height: 80) PageView(pages: [ AnyView(Color.screenBackground), AnyView( HStack { Image(.am10) // 任意のアイコン設定 .resizable() .frame(width: 50, height: 50) Text(verbatim: "わたしがつくりました") } ) ]) .frame(height: 50) Spacer() } } |
これで登録画面にこんな感じで仕込むことができます。
おわりに
これで 25 日間の家計簿アプリの作成はおしまいです!!!
下記にソースを置いておくので自分専用の家計簿アプリを作ってください!!
GitHub - adventam10/ExpenseLog
Contribute to adventam10/ExpenseLog development by creating an account on GitHub.
Amazon.co.jp
コメント