フレームワークの統合

macOS アプリの作成




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





















LandmarkDetail.swift


  1. import SwiftUI
  2. struct LandmarkDetail: View {
  3. @EnvironmentObject var modelData: ModelData
  4. var landmark: Landmark
  5. var landmarkIndex: Int {
  6. modelData.landmarks.firstIndex(where: { $0.id == landmark.id })!
  7. }
  8. var body: some View {
  9. ScrollView {
  10. MapView(coordinate: landmark.locationCoordinate)
  11. .ignoresSafeArea(edges: .top)
  12. .frame(height: 300)
  13. CircleImage(image: landmark.image)
  14. .offset(y: -130)
  15. .padding(.bottom, -130)
  16. VStack(alignment: .leading) {
  17. HStack {
  18. Text(landmark.name)
  19. .font(.title)
  20. .foregroundColor(.primary)
  21. FavoriteButton(isSet: $modelData.landmarks[landmarkIndex]
    .isFavorite)
  22. }
  23. HStack {
  24. Text(landmark.park)
  25. Spacer()
  26. Text(landmark.state)
  27. }
  28. .font(.subheadline)
  29. .foregroundColor(.secondary)
  30. Divider()
  31. Text("About \(landmark.name)")
  32. .font(.title2)
  33. Text(landmark.description)
  34. }
  35. .padding()
  36. }
  37. .navigationTitle(landmark.name)
  38. .navigationBarTitleDisplayMode(.inline)
  39. }
  40. }
  41. struct LandmarkDetail_Previews: PreviewProvider {
  42. static let modelData = ModelData()
  43. static var previews: some View {
  44. LandmarkDetail(landmark: modelData.landmarks[0])
  45. .environmentObject(modelData)
  46. }
  47. }


プレビューその 1



LandmarkDetail.swift


  1. LandmarkDetail(landmark: modelData.landmarks[0])
  2. .environmentObject(modelData)
  3. .frame(width: 850, height: 700)
  4. }
  5. }


プレビューその 2







LandmarkDetail.swift


  1. FavoriteButton(isSet: $modelData.landmarks[landmarkIndex].isFavorite)
  2. }
  3. VStack(alignment: .leading) {
  4. Text(landmark.park)
  5. Text(landmark.state)
  6. }


プレビューその 3



LandmarkDetail.swift


  1. .frame(height: 300)
  2. VStack(alignment: .leading, spacing: 20) {
  3. HStack(spacing: 24) {
  4. CircleImage(image: landmark.image)
  5. .offset(y: -130)
  6. .padding(.bottom, -130)
  7. VStack(alignment: .leading) {
  8. HStack {
  9. Text(landmark.name)
  10. .font(.title)
  11. .foregroundColor(.primary)
  12. FavoriteButton(isSet: $modelData.landmarks[landmarkIndex].isFavorite)
  13. }
  14. VStack(alignment: .leading) {
  15. Text(landmark.park)
  16. Text(landmark.state)
  17. }
  18. .font(.subheadline)
  19. .foregroundColor(.secondary)
  20. }
  21. }
  22. Divider()


プレビューその 4



LandmarkDetail.swift


  1. VStack(alignment: .leading, spacing: 20) {
  2. HStack(spacing: 24) {
  3. CircleImage(image: landmark.image)
  4. VStack(alignment: .leading) {
  5. HStack {



  1. }
  2. .padding()
  3. .offset(y: -50)
  4. }
  5. .navigationTitle(landmark.name)


プレビューその 5




LandmarkDetail.swift


  1. VStack(alignment: .leading, spacing: 20) {
  2. HStack(spacing: 24) {
  3. CircleImage(image: landmark.image.resizable())
  4. .frame(width: 160, height: 160)
  5. VStack(alignment: .leading) {


プレビューその 6



LandmarkDetail.swift


  1. }
  2. .padding()
  3. .frame(maxWidth: 700)
  4. .offset(y: -50)
  5. }
  6. .navigationTitle(landmark.name)


プレビューその 7



LandmarkDetail.swift


  1. .foregroundColor(.primary)
  2. FavoriteButton(isSet: $modelData.landmarks[landmarkIndex].isFavorite)
  3. .buttonStyle(PlainButtonStyle())
  4. }


プレビューその 8



LandmarkDetail.swift


  1. import SwiftUI
  2. import MapKit
  3. struct LandmarkDetail: View {
  4. @EnvironmentObject var modelData: ModelData
  5. var landmark: Landmark
  6. var landmarkIndex: Int {
  7. modelData.landmarks.firstIndex(where: { $0.id == landmark.id })!
  8. }
  9. var body: some View {
  10. ScrollView {
  11. ZStack(alignment: Alignment(horizontal: .trailing, vertical: .top)) {
  12. MapView(coordinate: landmark.locationCoordinate)
  13. .ignoresSafeArea(edges: .top)
  14. .frame(height: 300)
  15. Button("Open in Maps") {
  16. let destination = MKMapItem(placemark: MKPlacemark(coordinate: landmark.locationCoordinate))
  17. destination.name = landmark.name
  18. destination.openInMaps()
  19. }
  20. .padding()
  21. }
  22. VStack(alignment: .leading, spacing: 20) {
  23. HStack(spacing: 24) {
  24. CircleImage(image: landmark.image.resizable())
  25. .frame(width: 160, height: 160)
  26. VStack(alignment: .leading) {
  27. HStack {
  28. Text(landmark.name)
  29. .font(.title)
  30. .foregroundColor(.primary)
  31. FavoriteButton(isSet: $modelData.landmarks[landmarkIndex].isFavorite)
  32. .buttonStyle(PlainButtonStyle())
  33. }
  34. VStack(alignment: .leading) {
  35. Text(landmark.park)
  36. Text(landmark.state)
  37. }
  38. .font(.subheadline)
  39. .foregroundColor(.secondary)
  40. }
  41. }
  42. Divider()
  43. Text("About \(landmark.name)")
  44. .font(.title2)
  45. Text(landmark.description)
  46. }
  47. .padding()
  48. .frame(maxWidth: 700)
  49. .offset(y: -50)
  50. }
  51. .navigationTitle(landmark.name)
  52. }
  53. }
  54. struct LandmarkDetail_Previews: PreviewProvider {
  55. static let modelData = ModelData()
  56. static var previews: some View {
  57. LandmarkDetail(landmark: modelData.landmarks[0])
  58. .environmentObject(modelData)
  59. .frame(width: 850, height: 700)
  60. }
  61. }


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






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