フレームワークとの統合

UIKit とのインターフェース






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







    PageControl.swift


  1. import SwiftUI
  2. import UIKit
  3. struct PageControl: UIViewRepresentable {
  4. var numberOfPages: Int
  5. @Binding var currentPage: Int
  6. func makeUIView(context: Context) -> UIPageControl {
  7. let control = UIPageControl()
  8. control.numberOfPages = numberOfPages
  9. return control
  10. }
  11. func updateUIView(_ uiView: UIPageControl, context: Context) {
  12. uiView.currentPage = currentPage
  13. }
  14. }


    PageView.swift


  1. import SwiftUI
  2. struct PageView<Page: View>: View {
  3. var pages: [Page]
  4. @State private var currentPage = 0
  5. var body: some View {
  6. ZStack(alignment: .bottomTrailing) {
  7. PageViewController(pages: pages, currentPage: $currentPage)
  8. PageControl(numberOfPages: pages.count, currentPage: $currentPage)
  9. .frame(width: CGFloat(pages.count * 18))
  10. .padding(.trailing)
  11. }
  12. }
  13. }
  14. struct PageView_Previews: PreviewProvider {
  15. static var previews: some View {
  16. PageView(pages: ModelData().features.map { FeatureCard(landmark: $0) })
  17. .aspectRatio(3 / 2, contentMode: .fit)
  18. }
  19. }


プレビューその 1



    PageControl.swift


  1. @Binding var currentPage: Int
  2. func makeCoordinator() -> Coordinator {
  3. Coordinator(self)
  4. }
  5. func makeUIView(context: Context) -> UIPageControl {
  6. let control = UIPageControl()



  1. uiView.currentPage = currentPage
  2. }
  3. class Coordinator: NSObject {
  4. var control: PageControl
  5. init(_ control: PageControl) {
  6. self.control = control
  7. }
  8. @objc
  9. func updateCurrentPage(sender: UIPageControl) {
  10. control.currentPage = sender.currentPage
  11. }
  12. }
  13. }


    PageControl.swift


  1. let control = UIPageControl()
  2. control.numberOfPages = numberOfPages
  3. control.addTarget(
  4. context.coordinator,
  5. action: #selector(Coordinator.updateCurrentPage(sender:)),
  6. for: .valueChanged)
  7. return control


プログラム全体 その 1



    CategoryHome.swift


  1. import SwiftUI
  2. struct CategoryHome: View {
  3. @EnvironmentObject var modelData: ModelData
  4. @State private var showingProfile = false
  5. var body: some View {
  6. NavigationView {
  7. List {
  8. PageView(pages: modelData.features.map { FeatureCard(landmark: $0) })
  9. .aspectRatio(3 / 2, contentMode: .fit)
  10. .listRowInsets(EdgeInsets())
  11. ForEach(modelData.categories.keys.sorted(), id: \.self) { key in
  12. CategoryRow(categoryName: key, items: modelData.categories[key]!)
  13. }
  14. .listRowInsets(EdgeInsets())
  15. }
  16. .listStyle(InsetListStyle())
  17. .navigationTitle("Featured")
  18. .toolbar {
  19. Button(action: { showingProfile.toggle() }) {
  20. Image(systemName: "person.crop.circle")
  21. .accessibilityLabel("User Profile")
  22. }
  23. }
  24. .sheet(isPresented: $showingProfile) {
  25. ProfileHost()
  26. .environmentObject(modelData)
  27. }
  28. }
  29. }
  30. }
  31. struct CategoryHome_Previews: PreviewProvider {
  32. static var previews: some View {
  33. CategoryHome()
  34. .environmentObject(ModelData())
  35. }
  36. }


プレビューその 2






セクション 1セクション 2
セクション 4セクション 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