目前,我只是记录一堆运动数据并将其保存到文件中。然而,当我绘制数据时,我很难相信我得到了正确的读数。这是我的手表代码:
- (IBAction)startStopRecording {
if (!recording){
NSLog(@"starting to record");
recording = YES;
data = [[NSMutableArray alloc] init];
[self.startRecording setTitle:@"Stop Recording"];
if (self.motionManager.deviceMotionAvailable) {
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
[data addObject:[NSString stringWithFormat:@"%f, %f, %f, %f, %f, %f, %f, %f, %f", motion.attitude.pitch, motion.attitude.roll, motion.attitude.yaw, motion.userAcceleration.x, motion.userAcceleration.y, motion.userAcceleration.z, motion.rotationRate.x, motion.rotationRate.y, motion.rotationRate.z]];
NSLog(@".");
}];
}
}else{
recording = NO;
NSLog(@"stopping recording");
[self.motionManager stopDeviceMotionUpdates];
[self.startRecording setTitle:@"Start Recording"];
[InterfaceController openParentApplication:@{ @"data": data } reply:^(NSDictionary *replyInfo, NSError *error) {
NSLog(@"Data has been saved.");
NSLog(@"replyInfo …
Run Code Online (Sandbox Code Playgroud) 我想跟踪用户的位置并根据他的移动在离线地图中更新它,而无需使用 GPS 且必须依赖位置更新。
我已经尝试过CMMotionManager
并获得acceleration
了G。然而,这是加速度而不是速度。管理者还允许获得重力、旋转和态度。
有没有办法计算用户的速度m/s
?如果是这样,我该怎么办?有公式/代码示例吗?
我正在使用此代码来定义设备位置。横滚和俯仰值看起来不错(当设备放在桌子上时,它们为 0),但当偏航为 0 时,罗盘指向西。怎么了?
[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical toQueue:[NSOperationQueue currentQueue]
withHandler: ^(CMDeviceMotion *motion, NSError *error){
[self performSelectorOnMainThread:@selector(handleDeviceMotion:) withObject:motion waitUntilDone:YES];
}];
}
}
- (void)handleDeviceMotion:(CMDeviceMotion*)motion {
CMAttitude *attitude = motion.attitude;
double yaw = attitude.yaw * 180 / M_PI;
double pitch = attitude.pitch * 180 / M_PI;
double roll = attitude.roll * 180 / M_PI;
self.xLabel.text = [NSString stringWithFormat:@"%7.4f", yaw];
self.yLabel.text = [NSString stringWithFormat:@"%7.4f", pitch];
self.zLabel.text = [NSString stringWithFormat:@"%7.4f", roll];
[self sendDeviceAttitudeLogWithYaw:yaw pitch:pitch roll:roll];
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 CoreMotion 和 Swift 获取加速度计更新,这是我放置在 viewDidLoad 中的内容:
override func viewDidLoad() {
super.viewDidLoad()
let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.2
motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()) {
(info:CMAccelerometerData!,error:NSError!) in
if error != nil {
println(error)
}
else {
println("OK")
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,看起来我的闭包从未被调用(我控制台中没有任何内容),你知道为什么吗?
我正在XCode 7.0上构建一个iPhone应用程序(9.0.2).想知道最好的方法是确定用户是否从我的应用程序中访问了Motion和Fitness权限.
我主要使用CMMotionActivityManager类.有一个名为+ isActivityAvailable的属性,但即使Motion和Fitness权限设置为false,它也会返回true.
谢谢!
我想根据加速度计随时计算当前的iphone运动速度,加速度计是可变的.谁能提出任何想法?
CMMotionActivity
当框架返回automotive
类型时,我正在使用并试图区分汽车,火车和公共汽车。
这不仅可以使用来实现CoreMotion
,所以我认为有必要使用第三方服务,例如云服务或第三方框架。
有谁遇到过同样的问题吗?谢谢
我想在应用程序暂停(而不是停止)时检测运动活动。我使用了这段代码,如果用户使用应用程序,它就可以工作:
let isActivityAvailable = CMMotionActivityManager.isActivityAvailable()
if isActivityAvailable {
CMMotionActivityManager().startActivityUpdates(to: OperationQueue.main) { (motionActivity) in
if (motionActivity!.confidence.rawValue > 0) {
if (motionActivity?.walking)! {
print("User is walking")
}
}
}
}
Run Code Online (Sandbox Code Playgroud) core-motion ×8
ios ×6
objective-c ×2
swift ×2
apple-watch ×1
cocoa-touch ×1
gps ×1
iphone ×1
watchkit ×1