SwiftUI에서 전자 나침반의 값 가져 오기
8780 단어 MapKitCoreLocationSwiftUI
개요
iOS 앱에서 전자 나침반을 사용하고 싶기 때문에
SwiftUI에서 나침반 정보를 얻고 지도를 돌리는 것만으로 간단한 샘플을 만들어 보았다.
CoreLocation 서비스 사용을 위한 준비
앱의 info.plist
Information Property List
Privacy - Location When In Use Usage Description
추가,"지도, 전자 나침반 정보를 얻는 데 사용합니다"
같은 적절한 문자열을 설정합니다.
소스 코드
LocationManager.swift
파일을 추가하고 북쪽으로 각도 정보(heading)를 @Published
ContentView.swift
내에서 Map(...)을 사용하여 지도를 표시하고 각도 정보(heading)를 받아 지도를 회전합니다.LocationManager.swift
import MapKit
class LocationManager: NSObject, ObservableObject, CLLocationManagerDelegate {
@Published var heading:CLLocationDirection = 0.0
let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
manager.requestWhenInUseAuthorization()
//電子コンパス設定
manager.headingFilter = kCLHeadingFilterNone
manager.headingOrientation = .portrait
manager.startUpdatingHeading()
}
//電子コンパス値取得
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
self.heading = newHeading.magneticHeading
}
}
LocationManager 클래스가 발행한 region을 꺼내 Map에서 지도를 표시하고, heading을 꺼내 rotationEffect()로 지도를 회전시킨다.
ContentView.swift
import SwiftUI
import MapKit
struct ContentView: View {
@ObservedObject var manager = LocationManager()
@State var region = MKCoordinateRegion()
@State var trackingMode = MapUserTrackingMode.follow
var body: some View {
let heading = $manager.heading.wrappedValue
let latitude = $region.center.latitude.wrappedValue
let longitude = $region.center.longitude.wrappedValue
VStack{
Text("緯度:\(latitude) 経度: \(longitude)")
Text("北方向: \(heading)")
Map(coordinateRegion: $region,
showsUserLocation: true,
userTrackingMode: $trackingMode)
.clipShape(Circle())
.overlay(Circle().stroke(Color.white, lineWidth: 4))
.shadow(radius: 10)
.padding(40)
.edgesIgnoringSafeArea(.bottom)
.rotationEffect(Angle(degrees: -heading))
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
화면 표시
상단에 위도 경도, 북쪽 방향을 표시하고 중심으로 둥글게 자른 지도를 표시합니다.
iPhone을 움직이면 지도가 회전합니다.
감상
R03/06/04
상상 이상으로 쉽게 할 수 있었다
R03/06/10
소스 간소화
Reference
이 문제에 관하여(SwiftUI에서 전자 나침반의 값 가져 오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/chi_soft_dev/items/0ff37546a6fb9d800e98텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)