我一直在这里找到的iphone增强现实框架之上构建, 但遗憾的是,在没有陀螺仪的手机(即3GS)上,它不起作用(正如它所说的那样).
有没有人知道修复它使运动传感器和指南针标题相反?或者是否有人会如此富裕地为这样的框架提供代码?
我需要一种方法来使矢量工作,如果不可能,我将需要推进并只使用标题.
我一直在研究新的M7芯片CMMotionActivityManager,用于确定设备的用户是在走路,跑步,在汽车等等(参见Apple文档).这似乎是尝试LocationManager仅使用和加速计数据来确定此前一步的一大进步.
然而,我注意到CMMotionActivityManager没有自行车活动,这是令人失望的,并且几乎是一个完全用作新活动经理的交易破坏者.有没有其他人找到一个方便的方式CMMotionActivityManager与骑自行车一起使用,而不必重新加入CMLocationManager+加速度计只是为了尝试测试骑自行车?
请注意,这也不包括像火车这样的东西的一般运输选项.例如,我每天在火车上上班一小时.汽车可以至少更加通用,类似于Move使用Transport的方式.
CMMotionActivity 仅具有以下定义的运动类型:
来自Apple代码的有用说明,不一定能解决问题,但有用:
CMMotionActivity
基于设备的运动估计用户的活动.
活动作为一组属性公开,属性不是互斥的.
例如,如果您在停车标志处停车时状态可能如下:固定=是,行走=否,运行=否,汽车=是
或移动车辆,静止=否,行走=否,运行=否,汽车=是
或者设备可以运动但不能行走或在车辆中.静止=否,行走=否,运行=否,汽车=否.请注意,在这种情况下,所有属性都是NO.
[直接来源:Apple iOS Framework,CoreMotion/CMMotionActivity.h @interface CMMotionActivity,内联代码注释]
我已经看到两种使用CoreMotion框架描述不同设备方向的下降对象行为的方法.我已经在代码中尝试了两个版本,它们似乎都表现得像我期望的那样,即无论设备方向如何都会向地球坠落.
我只是好奇为什么两个版本的行为相同,即使对于第一个版本,x和y方向的加速度,即dx和dy,是横向切换?
1)
if var dx = data?.acceleration.x, var dy = data?.acceleration.y {
switch UIDevice.currentDevice().orientation {
case .Portrait:
dy = -dy
case .PortraitUpsideDown:
break
case .LandscapeRight:
swap(&dx, &dy)
case .LandscapeLeft:
swap(&dx, &dy)
dy = -dy
default:
dx = 0
dy = 0
}
gravity.gravityDirection = CGVector(dx: dx, dy: dy)
}
Run Code Online (Sandbox Code Playgroud)
2)
if var dx = data?.acceleration.x, var dy = data?.acceleration.y {
switch UIDevice.currentDevice().orientation {
case .Portrait:
dy = -dy
case .PortraitUpsideDown:
break
case .LandscapeRight:
break
case …Run Code Online (Sandbox Code Playgroud) 我想创建一个简单的应用程序,当我在Y轴上从起点到终点移动手机时,在屏幕上绘制一条简单的线,例如从点a(0,0)到点b(0,10)请帮忙
演示:

我正在努力让CMPedometer返回任何步骤数据.但是我得到了IconfigureError Domain=CMErrorDomain Code=103 "The operation couldn’t be completed. (CMErrorDomain error 103.)"
我正在使用swift并将queryPedometerDataFromDate查询分解为尽可能简单.
let pedometer = CMPedometer()
let fromDateString = "2015-01-22"
let toDateString = "2015-01-23"
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "YYYY-MM-DD"
let fromDate = dateFormatter.dateFromString(fromDateString)
let toDate = dateFormatter.dateFromString(toDateString)
pedometer.queryPedometerDataFromDate(fromDate, toDate: toDate) { (data:CMPedometerData!, error:NSError!) -> Void in
if error == nil {
println(data)
} else {
println(error)
}
}
Run Code Online (Sandbox Code Playgroud)
我为我的应用程序启用了动态检测,从HealthKit获取类似数据没有问题.
我必须遗漏一些简单的东西,但我看不出它是什么!
我的应用程序在后台报告并记录位置,高度,旋转和加速度计数据(DeviceMotion).这适用于ios 10.3.3.在IOS 11上,当设备被锁定时,我不再拥有访问运动数据.不过,高度数据和位置数据仍然会流式传输到控制台.
IOS 11中的某些内容发生了变化,导致我无法访问动态数据,或者我正在尝试以Apple现在阻止的方式访问它,例如OperationQueue.main
这是我如何开始动态更新.如果手机解锁,一切正常.如果我锁定手机,没有更新更新:
let motionManager = self.motionManager
if motionManager.isDeviceMotionAvailable {
motionUpdateInterval = 0.15
motionManager.deviceMotionUpdateInterval = motionUpdateInterval
motionManager.startDeviceMotionUpdates(using: .xArbitraryZVertical, to: OperationQueue.main) {deviceMotion, error in
guard let deviceMotion = deviceMotion else { return }
Run Code Online (Sandbox Code Playgroud)
我找不到关于运动背景模式改变的任何信息,但似乎必须有一种方法,否则RunKeeper,Strava将会破坏.在IOS11发布之前,有人可以帮助我重新开始工作吗?
谢谢!
我正在使用CoreMotion获取ccompass标题,我注意到罗盘标题存在一些问题.
首先我初学CoreMotion.我有一个CMMotionManager对象,locationManager,它是CMMotionManager的一个实例.
// initialize CoreMotion
motionManager = [CMMotionManager new];
[motionManager setDeviceMotionUpdateInterval:1.0/30.0];
[motionManager setShowsDeviceMovementDisplay:YES];
[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical];
Run Code Online (Sandbox Code Playgroud)
位置数据每1/30.0秒更新一次.
出于调试目的,我有一个UILabel,它显示每个更新间隔更新的当前罗盘标题.应用程序启动时,我总是要做神奇的8来校准指南针.
校准指南针后,北极和南极的航向几乎是2-5秒.
几秒钟后,指南针变得狂野,角度四处跳跃.大多数情况下,它从两个方向的起始位置漂浮在10-20度左右.应该有一个奇怪的结果.经过30-60秒后,南北两次互换或向东和向西交换.
在WWDC 2011上,一个会议讨论了他们如何计算每个传感器与另一个传感器以补偿这些问题.在CoreMotion的配置中是否有任何错过我有这个精确标题结果的大问题?
我现在用3个设备(2个iPhone 4s和iPhone 4)在建筑物内外测试指南针.我在田野,小城市和大城市.它一直在发生.来自Apple的示例指南针应用程序几乎准确,在我的测试中准确率为90%.不幸的是,它不是Apple开源的.
谢谢你的阅读.
我有一个CMRotationMatrix*rot,我想得到矩阵中的俯仰,偏航,滚动.任何想法我怎么能这样做?
谢谢
我正在尝试使用3D旋转,但我似乎不知道框架如何进行计算.
例如,我得到这些数据:
偏航-1.010544螺距0.508249 roll 1.128918
然后我打印相应的旋转矩阵
在阅读了API和wiki之后,我非常确定必须有一种通用的方法来创建一个超出欧拉角度的旋转矩阵.我在这里尝试了所有这些,没有结果.
我错过了什么,或者这是怎么做到的?
我可以检查用户是否授权的健身数据使用-[CMMotionActivityManager queryActivityStartingFromDate:toDate:toQueue:withHandler:],并检查错误(CMErrorNotAuthorized或CMErrorMotionActivityNotAuthorized在处理程序).
如果用户进入隐私设置并拒绝我的应用程序,该应用程序将被终止,当我重新启动它时,一切正常.
如果用户转到隐私设置并全局拒绝健身数据,则应用程序不会被杀死,使用上述方法检查不会报告任何错误!
我必须针对iOS 8,所以我无法使用+[CMSensorRecorder isAuthorizedForRecording].
你有解决这个问题的可靠方法吗?拥有一个很好的位置授权API 非常烦人,但不适合这个!
core-motion ×10
ios ×6
iphone ×4
objective-c ×2
swift ×2
apple-m7 ×1
devicemotion ×1
gyroscope ×1
ios11 ×1
opengl-es ×1