如何在 Xcode 上打印指南针方向?

Posted

技术标签:

【中文标题】如何在 Xcode 上打印指南针方向?【英文标题】:How to print compass orientation on Xcode? 【发布时间】:2021-09-08 23:35:26 【问题描述】:

总的来说,我对编码非常陌生,并且一直在学习大量教程以了解我现在所处的位置。我关注了***的另一个问题:Finding the compass orientation of an iPhone in swift

按照每个答案中的代码,没有打印任何内容。这是我的代码:

import UIKit
import CoreLocation

class PointingViewController: UIViewController, CLLocationManagerDelegate 
    var locationManager: CLLocationManager = CLLocationManager()
    
    override func viewDidLoad() 
        super.viewDidLoad()
        locationManager.delegate = self


    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) 
        print(newHeading.magneticHeading)
    

   @IBAction func firstButtonPressed(_ sender: Any) 
        locationManager.startUpdatingLocation()
        locationManager.startUpdatingHeading()

理想情况下,只要按下按钮就会记录罗盘方向。我尝试将.startUpdatingLocation().startUpdatingHeading 放在viewDidLoad() 函数中,但没有发生任何变化。

有没有更好的方法来实现我的愿望?

【问题讨论】:

【参考方案1】:

代码看起来不错,除了你没有做文档说你需要做的所有事情,比如检查isHeadingAvailable等。文档说:

如果不支持标题信息,则调用此方法无效并且不会将事件传递给您的委托。

如果事情不起作用,实施locationManager(_:didFailWithError:) 也是一个好计划。

您是否已针对“将位置服务添加到您的应用”中记录的位置权限做了必要的事情

【讨论】:

【参考方案2】:

您应该在网上搜索合适的教程。我将为您提供一些指导以帮助您入门,但请自己进行研究。 您必须先请求许可。将此添加到您的viewDidLoad

locationManager.requestAlwaysAuthorization()

同时实现委托方法

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) 
    // start requesting heading information if you are authorized. 

并处理不同的状态。

您可能还需要在 Info.plist 中添加权限条目,但我不确定标题是否需要。

【讨论】:

以上是关于如何在 Xcode 上打印指南针方向?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin.Android 中获取指南针方向

在 Android 上查找指南针方向

如何在 XCode 11 中更改图像的位置以进行纵向或水平对齐

如何在 iOS 网络应用中找到指南针方向?

快速查找iPhone的指南针方向

快速查找 iPhone 的指南针方向