2017-03-17 1 views
0

사용자의 방향에 따라 항상 회전하는 간단한 탐색 응용 프로그램을 만들려고합니다. 나는 안드로이드에 대한 몇 가지 해답을 보았지만 아직 스위프트에서 효과가있는 것은 찾지 못했습니다.Swift에서 사용자의 방향에 따라지도 상자 맵을 회전하십시오.

나는 다음을 시도했지만 그것은 나를 위해 일하지 않고 이것이 내가 찾고있는 것에 더 가까워 지는지 확신 할 수 없다.

let newCam = MGLMapCamera() 
newCam.heading = 90 
mapView.setCamera(newCam, animated: true) 

저는 Xcode와 Swift에 매우 익숙하며 이해하기가 어려워서 쉽게 해결할 수 있습니다!

+0

무엇이 회전할까요? – Starlord

+0

지도 자체이므로 사용자 위치와 관련된지도상의 점이 예를 들어 북쪽 방향 인 경우지도가 회전하여 사용자/전화가 어떤 방향을 향하고 있는지 항상 실제로 가리키고 있습니다. – Dan

답변

0

mapView의 속성은 direction이며 설정할 수 있습니다. 이 속성의 값을 변경하면 맵보기가 즉시 업데이트됩니다. 변경 사항을 애니메이션으로 적용하려면 -setDirection:animated: 메서드를 대신 사용하십시오. 또는 다음과 같은 방법을 사용할 수 있습니다 방향

진북을 기준으로도 단위로 측정 된지도의 새로운 방향

func setCenter(_ centerCoordinate: CLLocationCoordinate2D, zoomLevel: Double, direction: CLLocationDirection, animated: Bool) 

.

CLLocationManager에서 startUpdatingHeading 메서드를 사용하여 북쪽에서 오프셋을 계산하여 주기적으로 호출 할 수 있습니다. 필요한 경우 완성 처리기가있는이 메서드의 다른 버전이 있습니다.

** 수정 **

당신은 전화가 지향하는 방향을 추출하기 위해 다음과 같은 코드를 사용할 수 있습니다. 이 장치는 여기 (실제로는 실제 장치에서) 콘솔에 인쇄되지만 숫자 (도)를 입력하고 코드에서 장치가 얼마나 북쪽을 가리키고 있는지 확인할 수 있습니다.

import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

var locationManager:CLLocationManager! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    locationManager = CLLocationManager() 
    locationManager.delegate = self 
    locationManager.startUpdatingHeading() 
} 

func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading) { 

    print(heading.magneticHeading) 
} 
} 

저는 지금 치과 의사에게 연락하지만 1 시간 정도 후에 다시 확인합니다.

+0

감사합니다. 당신의 대답은 유망한 것 같습니다. 내 경험 부족에 대해 용서해주세요.하지만 좀 더 자세히 구현하는 방법을 설명해 주시겠습니까? – Dan

0
func locationManager(_ manager: CLLocationManager, didUpdateHeading heading: CLHeading) { 
    // set mapView's direction to user's orientation, i.e. magnetic heading 
    mapView.direction = heading.magneticHeading 
} 
관련 문제