编辑:添加了一个全局,现在它正在工作。但我仍然有疑问..请继续阅读:)
我想在需要时在 Y 轴上进行加速,并在代码的不同部分使用它。在这个例子中,我在一个 while 循环中使用它来进行测试。
我的代码正在运行,但我是否正确使用了 UpdateToQueue... 方法,还是这种实现我想要的“非正统”方式?
我已将更新间隔设置为 30 毫秒,您认为这是“安全”更新间隔吗?有人告诉我,我在选择时应该小心,因为当前或以后的硬件/iOS 更新可能无法跟上这样的时间间隔,这是真的吗?
double myAcceleration; // a global..
-(void) play // my "main" method..
{
CMMotionManager *motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 0.03; // update every 30ms
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue]
withHandler:^(CMDeviceMotion *motion, NSError *error)
{
myAcceleration = motion.userAcceleration.y;
}
];
while(!self.stopButtonPressed)
{
NSLog(@"Y-Axis acceleration is %f", myAcceleration);
}
}
Run Code Online (Sandbox Code Playgroud) 我在这里有一个思考和搜索问题,但找不到好的方向……我希望开发一种算法,通过使用设备运动在 360 度图像(球状)中移动。
因此,如果用户将设备指向他面前,他将获得图像的确定原点。当他在他周围移动设备时,全景图像会随之移动。
我可以研究任何想法或来源?
感谢并祝所有使用 Swift 的人好运 :)
我正在使用 iBeacons 构建一个基于室内位置的应用程序,但是我使用了很多 iPhone 传感器来获得准确的运动表示(速度、方向等)。我目前一直在使用 CoreMotion 计步器及其计步属性。我有一段代码,可以简单地计算步数并将其打印在标签中,我注意到设备需要大约 10 步才能记录我的动作,然后每三步或四步更新一次标签。“步行”状态下的这些更新很好,但我很想知道是否可以加快初始响应和从静止到步行的转换,而不是从 10 减少到 5,这是可以接受的。这是计算步数的代码:
if(CMPedometer.isStepCountingAvailable()){
self.pedoMeter.queryPedometerDataFromDate(NSDate(), toDate: NSDate()) { (data : CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
self.pedoMeter.startPedometerUpdatesFromDate(NSDate()) { (data: CMPedometerData!, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if(error == nil){
self.steps.text = "\(data.numberOfSteps)"
}
})
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还将更新间隔增加到最大
manager.deviceMotionUpdateInterval = 0
Run Code Online (Sandbox Code Playgroud)
这些是我正在使用的课程
let activityManager = CMMotionActivityManager()
let manager = CMMotionManager()
let pedoMeter = …Run Code Online (Sandbox Code Playgroud) accelerometer ios core-motion indoor-positioning-system swift
因此,WatchOS 2 支持核心运动框架,并允许活动的 WatchKit 应用程序访问来自 Apple Watch 加速计的数据。我想访问这些数据,但是是在 iPhone 上。除了在手表上打开一个应用程序来收集数据并通过手表连接将其传输回手机之外,还有其他方法可以做到这一点吗?
在 Healthkit 中,手表收集的所有数据都会同步回手机,这意味着我的 iPhone 应用程序可以通过 HKSampleQuery 直接获取数据。我想知道 Healthkit 中的“Active Energy”记录是否只是手表核心运动加速度计数据的汇总,但我不确定。
我曾考虑过使用手表连接和 SendMessage 将手表从 iPhone 上唤醒并获取数据,但我读到这是不可能的。我可以从手表上唤醒 iPhone,但反之则不行。
我看过 WWDC 2015 视频,包括“核心运动的新增功能”。它显示您可以在手表上获取核心运动数据,但无法在iPhone上获取手表核心运动数据。
有什么建议么?谢谢
我正在尝试从 CMPedometer 收集 10 天的步数。7 天工作正常,但最后三天返回 0。
这是代码:
var days:[String] = []
var stepsTaken:[Int] = []
let activityManager = CMMotionActivityManager()
let pedoMeter = CMPedometer()
var cnt = 0
override func viewDidLoad() {
super.viewDidLoad()
getDataForLast10Days()
}
func getDataForLast10Days() {
if(CMPedometer.isStepCountingAvailable()){
let serialQueue : DispatchQueue = DispatchQueue(label: "com.example.MyQueue", attributes: .concurrent)
let formatter = DateFormatter()
formatter.dateFormat = "d MMM"
serialQueue.sync(execute: { () -> Void in
let today = NSDate()
for day in 1...10{
let from = NSDate(timeIntervalSinceNow: Double(-7+day) ))
let hour = Calendar.current.component(.hour, …Run Code Online (Sandbox Code Playgroud) 目前我正在开发一个应用程序,它需要检测 iPhone 是否开始和停止垂直移动。我需要能够检测到非常短(50-100 厘米)的垂直距离,即一个人是否进行深蹲。
有没有办法计算Core Motion 框架?
let motion = CMMotionManager()
if motion.isDeviceMotionAvailable {
self.motion.deviceMotionUpdateInterval = 1.0 / 60.0
self.motion.showsDeviceMovementDisplay = true
self.motion.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: .main, withHandler: { (data, error) in
if let validData = data {
// Just a random minimum acceleration threshold
if validData.userAcceleration.y > 3 {
print(validData.userAcceleration.y)
}
}
})
}
Run Code Online (Sandbox Code Playgroud) 我正在使用xcode 4.2(并将很快升级)和这些代码行
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / kAccelerometerFrequency)];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
Run Code Online (Sandbox Code Playgroud)
代码工作,但我有一个黄色警告说代码是deprecated,我看了新的参考,CoreMotion现在做加速度计.我想知道什么是写上面的东西的新方法..?
我在CMDeviceMotion的userAcceleration字段中看到了一些意外的读数.当我从CMAccelerometerData查看原始加速度计数据时,我看到如果iPhone在桌面上是平的,读数是1G直下(1G在-Z轴),如果我放下iphone(当然在柔软的表面上)那么加速器读数按预期变为零.那一切都很好.当我改为使用CMDeviceMotion类时,当桌面上的iPhone平放时,userAcceleration读数为零.再次这很好.但是当我放下iPhone并读取CMDeviceManager userAcceleration时,userAcceleration值是1G直线上升(+ Z)而不是按预期下降(-Z).看起来userCcceleration读数实际上与设备实际遇到的加速度完全相反.有没有人观察过这个?在尝试整合速度和位置之前,我可以反转(乘以-1)所有userAcceleration值,还是我误解了userAcceleration正在读取的内容?
我正在开发一款应用程序,要求用户将iPhone瞄准太阳以触发特殊事件.
我可以根据陀螺仪和CoreMotion框架检索设备3D方向四元数,从中我可以获得偏航,滚动和俯仰角度.我还可以根据当前日期和时间(GMT)以及纬度和经度计算太阳的方位角和天顶角.我接下来要弄清楚的是如何比较这两组值(手机方向和太阳位置)以准确地检测设备与太阳的对齐.
关于如何实现这一点的任何想法?
我正在为我的学校做一个项目,为一个编程主题.我在Swift的Xcode工作.我想制作一个使用陀螺仪的应用程序.我不知道但不知何故它不会在我的iphone上运行因为Xcode中的一些错误我不知道如何修复.当我运行该程序时说"致命错误:在解开一个Optional值时意外发现nil (lldb)"我的项目的主要内容是使用陀螺仪在iphone屏幕上以度为单位显示旋转(偏转,俯仰,滚动).如果有人帮助我,我将非常感激.先感谢您.
我的ViewController中的代码:
import UIKit
import CoreMotion
class ViewController: UIViewController {
var currentMaxRotX: Double = 0.0
var currentMaxRotY: Double = 0.0
var currentMaxRotZ: Double = 0.0
let motionManager = CMMotionManager()
@IBOutlet var rotX : UILabel! = nil
@IBOutlet var rotY : UILabel! = nil
@IBOutlet var rotZ : UILabel! = nil
@IBOutlet var maxRotX : UILabel! = nil
@IBOutlet var maxRotY : UILabel! = nil
@IBOutlet var maxRotZ : UILabel! = nil
@IBOutlet weak var RollLabel: UILabel! = nil
@IBOutlet …Run Code Online (Sandbox Code Playgroud) core-motion ×10
ios ×9
iphone ×4
swift ×4
objective-c ×2
azimuth ×1
cocoa-touch ×1
healthkit ×1
ios5 ×1
motion ×1
quaternions ×1
xcode ×1