フレームワークとの統合

UIKit とのインターフェース






訳注:以下、必要な場所においては Mac と iPhone 両方のセクションを提供しています。
Mac → セクション 2、iPhone → セクション 102 とします。







    PageViewController.swift


  1. import SwiftUI
  2. import UIKit
  3. struct PageViewController<Page: View>: UIViewControllerRepresentable {
  4. var pages: [Page]
  5. func makeUIViewController(context: Context) -> UIPageViewController {
  6. let pageViewController = UIPageViewController(
  7. transitionStyle: .scroll,
  8. navigationOrientation: .horizontal)
  9. return pageViewController
  10. }
  11. func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
  12. pageViewController.setViewControllers(
  13. [UIHostingController(rootView: pages[0])], direction: .forward, animated: true)
  14. }
  15. class Coordinator: NSObject {
  16. var parent: PageViewController
  17. init(_ pageViewController: PageViewController) {
  18. parent = pageViewController
  19. }
  20. }
  21. }


    PageViewController.swift


  1. var pages: [Page]
  2. func makeCoordinator() -> Coordinator {
  3. Coordinator(self)
  4. }
  5. func makeUIViewController(context: Context) -> UIPageViewController {
  6. let pageViewController = UIPageViewController(


    PageViewController.swift


  1. func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
  2. pageViewController.setViewControllers(
  3. [context.coordinator.controllers[0]], direction: .forward, animated: true)
  4. }
  5. class Coordinator: NSObject {
  6. var parent: PageViewController
  7. var controllers = [UIViewController]()
  8. init(_ pageViewController: PageViewController) {
  9. parent = pageViewController
  10. controllers = parent.pages.map { UIHostingController(rootView: $0) }
  11. }
  12. }
  13. }


    PageViewController.swift


  1. [context.coordinator.controllers[0]], direction: .forward, animated: true)
  2. }
  3. class Coordinator: NSObject, UIPageViewControllerDataSource {
  4. var parent: PageViewController
  5. var controllers = [UIViewController]()
  6. init(_ pageViewController: PageViewController) {
  7. parent = pageViewController
  8. controllers = parent.pages.map { UIHostingController(rootView: $0) }
  9. }
  10. func pageViewController(
  11. _ pageViewController: UIPageViewController,
  12. viewControllerBefore viewController: UIViewController) -> UIViewController?
  13. {
  14. guard let index = controllers.firstIndex(of: viewController) else {
  15. return nil
  16. }
  17. if index == 0 {
  18. return controllers.last
  19. }
  20. return controllers[index - 1]
  21. }
  22. func pageViewController(
  23. _ pageViewController: UIPageViewController,
  24. viewControllerAfter viewController: UIViewController) -> UIViewController?
  25. {
  26. guard let index = controllers.firstIndex(of: viewController) else {
  27. return nil
  28. }
  29. if index + 1 == controllers.count {
  30. return controllers.first
  31. }
  32. return controllers[index + 1]
  33. }
  34. }
  35. }


    PageViewController.swift


  1. transitionStyle: .scroll,
  2. navigationOrientation: .horizontal)
  3. pageViewController.dataSource = context.coordinator
  4. return pageViewController
  5. }


プログラム全体








セクション 1セクション 2
セクション 3セクション 4
セクション 101セクション 102
セクション 103セクション 104






目次
Xcode の新機能

フレームワーク

  • SwiftUI

  • ビューの作成と結合

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    ビルドリストとナビゲーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7

    セクション 8


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107

    セクション 108

    ユーザー入力の処理

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    パスとシェイプの描画

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    ビューと移行のアニメーション

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    複雑なインターフェースの構成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    UI コントロールを扱う

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    UIKit とのインターフェース

    セクション 1

    セクション 2

    セクション 3

    セクション 4


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    watchOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    macOS アプリの作成

    セクション 1

    セクション 2

    セクション 3

    セクション 4

    セクション 5

    セクション 6

    セクション 7


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    セクション 106

    セクション 107