gpt4 book ai didi

ios - 没有让 Core Motion 在 UI 中显示加速度计数据

转载 作者:行者123 更新时间:2023-11-29 02:11:24 24 4
gpt4 key购买 nike

我正在尝试使用 Swift 在 UI 中显示加速度计数据。我正在关注 http://nshipster.com/cmdevicemotion/ 上的一些示例并尝试使用他们的旋转图像的方法,并且仅将 x 加速数据显示为标签,但我的 imageView 和我的标签都没有使用任何数据进行转换/更新。我正在我的 iPhone 6(不是模拟器)上构建和运行。

import UIKit
import CoreMotion

class ViewController: UIViewController {

@IBOutlet weak var label: UILabel!

@IBOutlet weak var image: UIImageView!

override func viewDidLoad() {
super.viewDidLoad()

let manager = CMMotionManager()

if manager.accelerometerAvailable {

manager.accelerometerUpdateInterval = 0.01

manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) {
[weak self] (data: CMAccelerometerData!, error: NSError!) in

let rotation = atan2(data.acceleration.x, data.acceleration.y) - M_PI

self?.image.transform = CGAffineTransformMakeRotation(CGFloat(rotation))

self?.label.text = String(format: "%.2f", data.acceleration.x)
}


}



}

最佳答案

您正在为 viewDidLoad() 创建一个本地 CMMotionManager,但您需要一个全局 CMMotionManager 以便它在您的内部可用队列。尝试在 viewDidLoad() 之上实例化 manager,如下所示:

import UIKit

import CoreMotion

class ViewController: UIViewController {

@IBOutlet weak var label: UILabel!

@IBOutlet weak var image: UIImageView!

let manager = CMMotionManager()

override func viewDidLoad() {
super.viewDidLoad()

let manager = CMMotionManager()

if manager.accelerometerAvailable {

manager.accelerometerUpdateInterval = 0.01

manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()) {
[weak self] (data: CMAccelerometerData!, error: NSError!) in

let rotation = atan2(data.acceleration.x, data.acceleration.y) - M_PI

self?.image.transform = CGAffineTransformMakeRotation(CGFloat(rotation))

self?.label.text = String(format: "%.2f", data.acceleration.x)
}
}
}

关于ios - 没有让 Core Motion 在 UI 中显示加速度计数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29247750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com