2016-12-10 8 views
0

Может ли кто-нибудь предоставить мне короткий фрагмент, который вернет мне магнитный заголовок iPhone? Я не хочу Цель-C, пожалуйста. Мне нужно это в Свифт.Код примера с магнитным заголовком для iOS

Я написал эти строки до сих пор, но он не возвращает меня никакого значения:

let locManager = CLLocationManager() 
locManager.desiredAccuracy = kCLLocationAccuracyBest 
locManager.requestWhenInUseAuthorization() 
locManager.startUpdatingLocation() 

locManager.startUpdatingHeading() 
locManager.headingOrientation = .portrait 
locManager.headingFilter = kCLHeadingFilterNone 

print(locManager.heading?.trueHeading.binade as Any) 

Спасибо!

+0

вы должны задать свой вопрос! не прося кого-нибудь написать вам код. возможно, для этого вам нужно искать фрилансера! –

ответ

1

Вы не установили делегат для менеджера местоположений. iOS не обновляет ваше местоположение сразу. Скорее, он будет вызывать функцию, предоставляемую вашим делегатом, когда у нее есть обновление местоположения/заголовка. Причиной этой установки является эффективность. Вместо 10 приложений, имеющих 10 разных менеджеров местоположения, конкурирующих за время на аппаратном обеспечении GPS, эти 10 менеджеров местоположения будут запрашивать уведомление, когда GPS обновляется.

Попробуйте это:

class ViewController: UIViewController, CLLocationManagerDelegate { 
    @IBOutlet weak var label: UILabel! 
    var locManager = CLLocationManager() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     locManager.desiredAccuracy = kCLLocationAccuracyBest 
     locManager.requestWhenInUseAuthorization() 
     locManager.headingOrientation = .portrait 
     locManager.headingFilter = kCLHeadingFilterNone 
     locManager.delegate = self // you forgot to set the delegate 

     locManager.startUpdatingLocation() 
     locManager.startUpdatingHeading() 
    } 

    // MARK: - 
    // MARK: CLLocationManagerDelegate 
    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { 
     print("Location Manager failed: \(error)") 
    } 

    // Heading readings tend to be widely inaccurate until the system has calibrated itself 
    // Return true here allows iOS to show a calibration view when iOS wants to improve itself 
    func locationManagerShouldDisplayHeadingCalibration(_ manager: CLLocationManager) -> Bool { 
     return true 
    } 

    // This function will be called whenever your heading is updated. Since you asked for best 
    // accuracy, this function will be called a lot of times. Better make it very efficient 
    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) { 
     label.text = "\(newHeading.magneticHeading)" 
    } 
} 
+0

Большое спасибо за помощь. Я потратил несколько часов на это. – jimmy2times

+0

Теперь у меня есть вопрос, как приложение может узнать, какая из этих 3 функций вызывать, когда заголовок доступен? – jimmy2times