0Pricing
Swift Academy · บทเรียน

การแสดงแผนที่ใน SwiftUI

แสดงแผนที่และคำอธิบายตำแหน่งด้วย Map

การแสดงแผนที่ใน SwiftUI เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

มุมมองแผนที่ของ SwiftUI

SwiftUI มีมุมมอง Map แบบเนทีฟใน MapKit สำหรับแสดงแผนที่แบบโต้ตอบได้โดยไม่ต้องใช้ UIKit ให้ import MapKit แล้ววาง Map ไว้ในลำดับชั้นของมุมมอง ตั้งแต่ iOS 17 เป็นต้นมา มุมมองนี้ใช้ API แบบประกาศสมัยใหม่

import SwiftUI
import MapKit

struct BasicMap: View {
    var body: some View {
        Map()
    }
}

ขอบเขตพิกัด

ขอบเขตหนึ่งรายการอธิบายด้วย MKCoordinateRegion ซึ่งประกอบด้วยพิกัด center และช่วงขอบเขตที่มองเห็นได้ของละติจูดหรือลองจิจูด ช่วงขอบเขตที่เล็กกว่าจะซูมเข้าใกล้มากขึ้น

let region = MKCoordinateRegion(
    center: CLLocationCoordinate2D(latitude: 41.008, longitude: 28.978),
    span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05)
)

การควบคุมกล้องด้วยตำแหน่ง

Map สมัยใหม่รับการผูกค่ากับ MapCameraPosition คุณสามารถเริ่มต้นที่ขอบเขต สี่เหลี่ยม หรือจัดกรอบเนื้อหาโดยอัตโนมัติได้ ใช้ .region(...) เพื่อตั้งค่าพื้นที่อย่างชัดเจน

struct CityMap: View {
    @State private var position: MapCameraPosition = .region(
        MKCoordinateRegion(
            center: .init(latitude: 41.008, longitude: 28.978),
            span: .init(latitudeDelta: 0.1, longitudeDelta: 0.1)
        )
    )
    var body: some View {
        Map(position: $position)
    }
}

การเพิ่มหมุด

Marker จะวางหมุดรูปบอลลูนมาตรฐานไว้ที่พิกัดหนึ่งพร้อมชื่อเรื่อง ให้วางหมุดไว้ภายในโคลสเชอร์ต่อท้ายของ Map ซึ่งเป็นตัวสร้างเนื้อหาแผนที่

Map {
    Marker("Hagia Sophia",
           coordinate: .init(latitude: 41.0086, longitude: 28.9802))
}

การปรับแต่งหมุด

หมุดรองรับ systemImage และสี tint เพื่อสื่อถึงหมวดหมู่ ทำให้หมุดแต่ละประเภทแตกต่างกันอย่างเห็นได้ชัดบนแผนที่

Map {
    Marker("Cafe", systemImage: "cup.and.saucer.fill",
           coordinate: cafeCoord)
        .tint(.brown)
}

คำอธิบายประกอบด้วยมุมมองแบบกำหนดเอง

เมื่อหมุดอย่างเดียวไม่เพียงพอ Annotation ช่วยให้คุณแสดงมุมมอง SwiftUI ใด ๆ ที่พิกัดหนึ่งได้ โดยระบุชื่อเรื่องและโคลสเชอร์เนื้อหา

Map {
    Annotation("Office", coordinate: officeCoord) {
        Image(systemName: "building.2.fill")
            .padding(6)
            .background(.blue, in: Circle())
            .foregroundStyle(.white)
    }
}

การแสดงหมุดหลายรายการจากข้อมูล

วนผ่านโมเดลของคุณด้วย ForEach ภายในตัวสร้างเนื้อหาแผนที่ เพื่อแสดงหมุดจำนวนมาก แต่ละรายการจะระบุพิกัดหนึ่งรายการ

struct Place: Identifiable {
    let id = UUID()
    let name: String
    let coordinate: CLLocationCoordinate2D
}

Map {
    ForEach(places) { place in
        Marker(place.name, coordinate: place.coordinate)
    }
}

การแสดงตำแหน่งที่ตั้งของผู้ใช้

เพิ่ม UserAnnotation() ลงในเนื้อหาแผนที่เพื่อแสดงจุดสีน้ำเงินที่คุ้นเคย การดำเนินการนี้ต้องได้รับการอนุญาตใช้ตำแหน่งที่ตั้งก่อน คุณสามารถใช้ร่วมกับหมุดของคุณเองได้

Map {
    UserAnnotation()
    ForEach(places) { p in
        Marker(p.name, coordinate: p.coordinate)
    }
}

ตัวควบคุมแผนที่

เพิ่มตัวควบคุมมาตรฐานด้วยตัวปรับแต่ง .mapControls ได้แก่ เข็มทิศ ปุ่มตำแหน่งที่ตั้งของผู้ใช้ และมุมมองมาตราส่วน ตัวควบคุมเหล่านี้จะแสดงขึ้นโดยอัตโนมัติและปรับตามรูปแบบแผนที่

Map { UserAnnotation() }
    .mapControls {
        MapUserLocationButton()
        MapCompass()
        MapScaleView()
    }

รูปแบบแผนที่

ใช้ตัวปรับแต่ง .mapStyle เพื่อสลับระหว่างการแสดงผลแบบมาตรฐาน ภาพถ่าย เช่น ภาพดาวเทียม และแบบผสม นอกจากนี้ คุณยังเปิดหรือปิดภูมิประเทศแบบสมจริงและจุดสนใจได้

Map()
    .mapStyle(.hybrid(elevation: .realistic))

การตอบสนองต่อการเปลี่ยนแปลงของกล้อง

ตัวปรับแต่ง .onMapCameraChange รายงานเมื่อขอบเขตที่มองเห็นเปลี่ยนแปลง เช่น หลังจากผู้ใช้เลื่อนแผนที่ ให้ใช้ตัวปรับแต่งนี้เพื่อดึงข้อมูลสำหรับพื้นที่ที่เพิ่งมองเห็น

Map(position: $position)
    .onMapCameraChange { context in
        let center = context.region.center
        print("Now centered at:", center.latitude, center.longitude)
    }

แบบทดสอบสั้น: แผนที่ SwiftUI

ทดสอบความรู้เกี่ยวกับ MapKit ใน SwiftUI

ทบทวน: การแสดงแผนที่ใน SwiftUI

ตอนนี้คุณสามารถสร้างแผนที่แบบโต้ตอบได้แล้ว:

  • ใช้ Map สมัยใหม่ร่วมกับการผูกค่าของ MapCameraPosition
  • วาง Marker หลายรายการหรือแสดงมุมมอง Annotation แบบกำหนดเอง โดยวนผ่านข้อมูลด้วย ForEach
  • แสดงจุดสีน้ำเงินด้วย UserAnnotation() และเพิ่ม .mapControls
  • กำหนดรูปแบบแผนที่และตอบสนองต่อการเปลี่ยนแปลงของกล้องด้วย .onMapCameraChange

คำถามที่พบบ่อย

บทเรียน “การแสดงแผนที่ใน SwiftUI” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแสดงแผนที่ใน SwiftUI” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแสดงแผนที่ใน SwiftUI”

แสดงแผนที่และคำอธิบายตำแหน่งด้วย Map คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การแสดงแผนที่ใน SwiftUI” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การขออนุญาตเข้าถึงตำแหน่ง
  2. การรับตำแหน่งของผู้ใช้
  3. การแสดงแผนที่ใน SwiftUI
  4. การแปลงพิกัดเป็นที่อยู่และภูมิภาค
← กลับไปที่ Swift Academy