2016-10-25 5 views
1

CLLocationManager를 사용하여 이동 한 거리를 계산하고 레이블 내부에 거리를 표시하려고합니다. 위치 사용을 요청했지만 라벨에 아무것도 표시되지 않습니다. xCode 시뮬레이터 내부에서 드라이브를 시뮬레이션하려고 시도했지만 아무 소용이 없습니다. 나는 앱 내부에지도가 표시되어 작동합니다. 내 위치는 추적하지만 그 모든 것은 작동합니다.스위프트 3에서 거리를 계산하지 않습니다.

은 Heres는 내을 locationManager 방법 :

func locationManager(manager:CLLocationManager, didUpdateLocations locations:[AnyObject]) { 

    // Map 

    theLabel.text = "\(locations[0])" 
    myLocations.append(locations[0] as! CLLocation) 

    let spanX = 0.007 
    let spanY = 0.007 
    let newRegion = MKCoordinateRegion(center: theMap.userLocation.coordinate, span: MKCoordinateSpanMake(spanX, spanY)) 
    theMap.setRegion(newRegion, animated: true) 

    if (myLocations.count > 1){ 
     let sourceIndex = myLocations.count - 1 
     let destinationIndex = myLocations.count - 2 

     let c1 = myLocations[sourceIndex].coordinate 
     let c2 = myLocations[destinationIndex].coordinate 
     var a = [c1, c2] 
     let polyline = MKPolyline(coordinates: &a, count: a.count) 
     theMap.add(polyline) 
    } 

    // Labels 

    let latestLocation: AnyObject = locations[locations.count - 1] 
    lat.text = String(format: "%.4f", latestLocation.coordinate.latitude) 
    long.text = String(format: "%.4f", latestLocation.coordinate.longitude) 
    horizAcc.text = String(format: "%.4f", latestLocation.horizontalAccuracy) 
    altitude.text = String(format: "%.4f", latestLocation.altitude) 
    vertAcc.text = String(format: "%.4f", latestLocation.verticalAccuracy) 

    if startLocation == nil { 
     startLocation = latestLocation as! CLLocation 
    } 

    let distanceBetween = (latestLocation.distance(from: startLocation)) 

    distance.text = String(format: "%.2f", distanceBetween) 

} 

어떤 도움이 크게 감사합니다! 필요한 경우 더 많은 코드를 제공 할 수 있습니다.

+0

정확히 작동하지 않는 것을 설명해 주실 수 있습니까? "작동하는 모든 것"이라고 말하면 넓습니다. – alexburtnik

+0

거리를 계산하여 레이블에 넣지 만 레이블은 절대로 변경되지 않습니다. –

+0

마침내'print (distanceBetween)'을 수행하고 출력을 말하십시오. –

답변

0

CLLocationManager 인스턴스에 대해 대리인 속성이 올바르게 설정되어 있지 않은 것 같습니다. 사용자가 나열한 것과 같은 CLLocationManagerDelegate 메서드 구현을 포함하는 개체를 알려야합니다.

그래서, 뷰 컨트롤러를 가정하는 것은 CLLocationManagerDelegate을 준수하고 게시하는 방법을 포함하고 당신이 당신의 뷰 컨트롤러 "을 locationManager"라고 CLLocationManager 속성을 준 가정, 당신은 단순히 아래와 같이 설정

self.locationManager.delegate = self 
    self.locationManager.startUpdatingLocation() 

당신 해당 위치를 viewDidLoad : 또는 원하는 위치에 둘 수 있으며 didUpdateLocation 대리자 메서드를 호출해야합니다.

관련 문제