SwiftUI Essentials (SwiftUI の本質)

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



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






    CircleImage.swift


  1. import SwiftUI
  2. struct CircleImage: View {
  3. var image: Image
  4. var body: some View {
  5. image
  6. .clipShape(Circle())
  7. .overlay(Circle().stroke(Color.white, lineWidth: 4))
  8. .shadow(radius: 7)
  9. }
  10. }
  11. struct CircleImage_Previews: PreviewProvider {
  12. static var previews: some View {
  13. CircleImage()
  14. }
  15. }



上記のリストの 16 行目を以下のように書き足します。



  1. CircleImage(image: Image("turtlerock"))



    MapView.swift


  1. import SwiftUI
  2. import MapKit
  3. struct MapView: View {
  4. var coordinate: CLLocationCoordinate2D
  5. @State private var region = MKCoordinateRegion()
  6. center: CLLocationCoordinate2D(latitude: 34.011_286, longitude: -116.166_868),
  7. span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
  8. )
  9. var body: some View {
  10. Map(coordinateRegion: $region)
  11. }
  12. }
  13. struct MapView_Previews: PreviewProvider {
  14. static var previews: some View {
  15. MapView(coordinate: CLLocationCoordinate2D(latitude: 34.011_286, longitude: -116.166_868))
  16. }
  17. }



上記のリストの 14 行目に、以下のように書き足します。



  1. private func setRegion(_ coordinate: CLLocationCoordinate2D) {
  2. region = MKCoordinateRegion(
  3. center: coordinate,
  4. span: MKCoordinateSpan(latitudeDelta: 0.2, longitudeDelta: 0.2)
  5. )
  6. }
  7. }
  8. struct MapView_Previews: PreviewProvider {



上記のリストの 6 行目から 12 行目を以下のように書き換えます。


  1. @State private var region = MKCoordinateRegion()
  2. var body: some View {
  3. Map(coordinateRegion: $region)
  4. .onAppear {
  5. setRegion(coordinate)
  6. }



    LandmarkDetail.swift


  1. import SwiftUI
  2. struct LandmarkDetail: View {
  3. var landmark: Landmark
  4. var body: some View {
  5. VStack {
  6. MapView()
  7. .ignoresSafeArea(edges: .top)
  8. .frame(height: 300)
  9. CircleImage()
  10. .offset(y: -130)
  11. .padding(.bottom, -130)
  12. VStack(alignment: .leading) {
  13. Text("Turtle Rock")
  14. .font(.title)
  15. .foregroundColor(.primary)
  16. HStack {
  17. Text("Joshua Tree National Park")
  18. Spacer()
  19. Text("California")
  20. }
  21. .font(.subheadline)
  22. .foregroundColor(.secondary)
  23. Divider()
  24. Text("About Turtle Rock")
  25. .font(.title2)
  26. Text("Descriptive text goes here.")
  27. }
  28. .padding()
  29. Spacer()
  30. }
  31. }
  32. }
  33. struct LandmarkDetail_Previews: PreviewProvider {
  34. static var previews: some View {
  35. LandmarkDetail(landmark: landmarks[0])
  36. }
  37. }



    LandmarkList.swift


  1. import SwiftUI
  2. struct LandmarkList: View {
  3. var body: some View {
  4. NavigationView {
  5. List(landmarks) { landmark in
  6. NavigationLink(destination: LandmarkDetail(landmark: landmark)) {
  7. LandmarkRow(landmark: landmark)
  8. }
  9. }
  10. .navigationTitle("Landmarks")
  11. }
  12. }
  13. }
  14. struct LandmarkList_Previews: PreviewProvider {
  15. static var previews: some View {
  16. LandmarkList()
  17. }
  18. }



上記の LandmarkDetail.swif のリストで 8、12、17、22、24、31、33 行目をそれぞれ以下のように書き換えます。


    LandmarkDetail.swift


  1. MapView(coordinate: landmark.locationCoordinate)


  1. CircleImage(image: landmark.image)


  1. Text(landmark.name)


  1. Text(landmark.park)


  1. Text(landmark.state)


  1. Text("About \(landmark.name)")


    1. Text(landmark.description)



    2. さらに 7 行目を以下のように書き換え、37 行目を削除します。



      1. ScrollView {


        1. Spacer()
        2. ////削除/////




          今削除した 36~37 行目に、以下のように書き足します。



          1. .padding()
          2. }
          3. .navigationTitle(landmark.name)
          4. .navigationBarTitleDisplayMode(.inline)
          5. }
          6. }




          セクション 1セクション 2セクション 3セクション 4
          セクション 5セクション 6セクション 7セクション 8
          セクション 101セクション 102セクション 103セクション 104
          セクション 105セクション 106セクション 107セクション 108





目次
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

    セクション 5


    セクション 101

    セクション 102

    セクション 103

    セクション 104

    セクション 105

    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