import UIKit
import ARKit
import PlaygroundSupport
import SceneKit
import CoreMotion
class MyViewController: UIViewController {
let motionManager = CMMotionManager()
var timer: Timer!
var label = UILabel(frame: CGRect(x: 50, y: 400, width: 400, height: 100))
override func loadView() {
let view = UIView()
view.addSubview(label)
label.text = "Show Yaw Here"
self.view = view
view.backgroundColor = .white
motionManager.startAccelerometerUpdates()
motionManager.startGyroUpdates()
motionManager.startMagnetometerUpdates()
motionManager.startDeviceMotionUpdates()
timer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(MyViewController.update), userInfo: nil, repeats: true)
}
@objc func update() {
self.label.text = "Obama"
if let accelerometerData = motionManager.accelerometerData {
print("Device Accelerometer: \(accelerometerData)")
}
if let gyroData = motionManager.gyroData {
print("Device Gyro: \(gyroData)")
}
if let magnetometerData = motionManager.magnetometerData {
print("Device Magnetometer: \(magnetometerData)")
}
if let deviceMotion = motionManager.deviceMotion {
print("Device Motion: \(deviceMotion)")
let yaw = (Int)(Double(floor(1000*deviceMotion.attitude.yaw)/1000) * 180.0/Double.pi)
self.label.text = "Yaw: \(yaw) Degrees"
}
}
}
PlaygroundPage.current.liveView = MyViewController()
这(上图)是我用作游乐场的代码。我直接从iOS应用程序获得了代码,当我在同一台设备上运行iOS应用程序时它运行得很好,这是一台从2018年初开始运行iOS 12的iPad。这是我用于实际应用程序的代码,完全适用于iPad兼容。它只是将Yaw值以度为单位写入文本框。当我运行其中任何一个时,我都不会收到错误或警告。视图控制器确实显示在操场上,初始标签文本也是如此,但是当我移动iPad时,代码不会更新设备动作,而是在应用版本中更新。
import UIKit
import CoreMotion
class ViewController: UIViewController {
let motionManager = CMMotionManager()
var timer: Timer!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
label.text = "ayy lmao"
motionManager.startAccelerometerUpdates()
motionManager.startGyroUpdates()
motionManager.startMagnetometerUpdates()
motionManager.startDeviceMotionUpdates()
timer = Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(ViewController.update), userInfo: nil, repeats: true)
}
@objc func update() {
if let accelerometerData = motionManager.accelerometerData {
print("Device Accelerometer: \(accelerometerData)")
}
if let gyroData = motionManager.gyroData {
print("Device Gyro: \(gyroData)")
}
if let magnetometerData = motionManager.magnetometerData {
print("Device Magnetometer: \(magnetometerData)")
}
if let deviceMotion = motionManager.deviceMotion {
print("Device Motion: \(deviceMotion)")
let yaw = (Int)(deviceMotion.attitude.yaw * 180.0/Double.pi)
self.label.text = "Yaw: \(yaw) Degrees"
}
}
}
核心位置API是异步的,因此在调用startUpdatingLocation()之后必须保持游乐场运行。所以给它一个旋转
PlaygroundPage.current.needsIndefiniteExecution = true
核心运动框架适用于iPad上的Swift Playgrounds
应用程序,适用于除Device Motion以外的所有设备。 StartDeviceMotionUpdates(to:){}
未能提供任何更新。可悲的是,我没有找到解释为什么这应该是!当然,GPS只能通过CoreLocation
访问,并且需要应用程序无法进行安全验证,因此无法访问GPS数据。