【问题标题】:How to diplay accelerometer data on viewController如何在 viewController 上显示加速度计数据
【发布时间】:2014-11-16 03:13:49
【问题描述】:

我正在使用这样的方法从陀螺仪和加速度计收集数据:

motionManager.startAccelerometerUpdatesToQueue(accelQueue, withHandler: accelHandler)

处理程序如下所示:

func accelHandler (accelerometerData : CMAccelerometerData!, error : NSError!){

    //for saving
    logging.accelerationX = accelerometerData.acceleration.x
    logging.accelerationY = accelerometerData.acceleration.y
    logging.accelerationZ = accelerometerData.acceleration.z

    //for displaying
    accelX.text = (NSString(format: "%.5f", accelerometerData.acceleration.x))
    accelY.text = (NSString(format: "%.5f", accelerometerData.acceleration.y))
    accelZ.text = (NSString(format: "%.5f", accelerometerData.acceleration.z))

}

logging.accelerationX 是我自己的变量,accelX.text 的类型是@IBOutlet weak var accelX: UILabel!。 处理程序运行可靠,但我没有在屏幕上收到相应标签中的数据字符串。 有人有什么建议吗?

【问题讨论】:

  • 做一些调试。您应该添加一些 println 语句以记录到控制台。尝试记录 accelerometerData 只是为了证明处理程序确实被调用了。尝试向自己记录accelXaccelX.window,这确实是一个标签,并且标签在界面中。
  • true,控制台已经输出了,因为我很伤心,处理程序运行正常,而且我经常向控制台接收数据。我会尝试您的建议记录 accelX 和 accelx.window!感谢您的意见

标签: swift accelerometer viewcontroller


【解决方案1】:

我猜问题出在accelQueue。您正在此队列上调用 accelHandler。这是一个后台队列(我猜)。但随后您正在与界面中的标签accelX 交谈。您必须切勿尝试与后台队列中的界面对话!因此,在执行此类操作之前,您需要先进入主队列。

【讨论】:

  • 啊,感谢您提供的信息。我从来没有想过这个。所以你认为我应该使用 motionManager.startAccelerometerUpdates() 方法,那就是没有队列的方法?这个队列的东西让我自己很困惑
  • 您可以做任何您喜欢的事情,但是如果您使用队列方法,如果您不想遇到严重的线程问题,则必须跳到主队列。这一点都不难,但很有必要。
  • 队列方式有优点也有缺点。这意味着您获得所有的更新。这可能是好是坏。通过计时器轮询,您在主线程上,如果可以接受,您可以减少轮询频率。
  • 这里是轮询方法的一个例子:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 该代码还说明了更新队列方法,但您会注意到我使用 main 线程进行更新!正是因为这样,我才不会遇到这类问题。
  • 谢谢,这很酷。我将首先研究队列,而不是尝试运行您的代码示例。
猜你喜欢
  • 1970-01-01
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多