Tag: 核心运动

为什么我没有得到任何加速计更新?

我正在尝试使用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") } } } 问题是,它看起来像我的封闭永远不会被调用(我没有在控制台中的任何东西),你知道为什么吗?

SceneKit视图呈现向后

我正在尝试我的第一个SceneKit应用程序。 我的目标是模拟地球表面的视图,并能够将设备的摄像机指向任意方向,并在摄像机视图上叠加信息。 首先,我只是试图让SceneKit相机视图匹配设备的方向。 为了validation它是否正常工作,我在特定的经度和纬度坐标处添加了一堆球体。 除了一个重要的问题,一切都在起作用。 该视图从应该显示的内容镜像左/右(东/西)。 我花了几个小时尝试调整相机的不同排列。 以下是我的完整testing应用程序视图控制器 我无法弄清楚正确的变化组合,让场景正确渲染。 北极的球体是正确的。 按我自己目前的经度从北极延伸到赤道的球体线如预期的那样出现在头顶上。 这是领域的其他线是不正确的。 它们从东西向镜像,就像镜子在我自己的经度上一样。 如果你想testing这个代码,使用SceneKit创build一个新的游戏项目。 将模板GameViewController.swiftreplace为下面的文件。 您还需要在Info.plist中添加“隐私 – 使用说明中的位置”键。 我也build议调整for lon in …行中的for lon in …以便数字以您自己的经度开始或结束。 然后您可以看到球体是否正在显示的正确部分上绘制。 这可能还需要对UIColor(hue: CGFloat(lon + 104) * 2 / 255.0颜色UIColor(hue: CGFloat(lon + 104) * 2 / 255.0 。 import UIKit import QuartzCore import SceneKit import CoreLocation import CoreMotion let EARTH_RADIUS = […]

加速度计低通滤波器平滑

我正在使用设备加速计并尝试平滑加速度计数据CMAcceleration加速。 我正在做这个帮助下面的代码: -(void)proccessAccelerometerData:(CMAcceleration)accelData { currentAccelX = (kUpdateInterval * accelData.x) + ((1.0 – kUpdateInterval) * currentAccelX); currentAccelY = (kUpdateInterval * accelData.y) + ((1.0 – kUpdateInterval) * currentAccelY); } currentAccelX和currentAccelY是最后一个加速度计x和y数据。 现在,我有平滑的x和y值,我的x或y的值是什么,以确定用户移动设备左/右/上/下的ID? 只是为了使事情更清楚,比方说,我有4个button,每个方向一个左/右/上/下,我想确定用户用户刷机的方向? (不是轻扫手势)。 提前致谢!

为什么CMDeviceMotionHandler从来没有被CoreMotion调用?

我已经将CoreMotion框架包含在我的项目中,并将CoreMotion框架导入到视图控制器的标题中: #import <CoreMotion/CoreMotion.h> 然后在-viewDidLoad我有这个简单的testing代码,我在iOS 4.3上运行的iPhone 4上: – (void)viewDidLoad { [super viewDidLoad]; CMMotionManager *motionManager = [[CMMotionManager alloc] init]; [motionManager setDeviceMotionUpdateInterval:0.1]; CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) { NSLog(@"foo"); }; [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:motionHandler]; NSLog(@"merde!"); } 当我在设备上运行项目并移动它时,我从来没有得到“foo”日志。 另外,我尝试在运动处理程序块中设置一个断点,它从不停止。 但是我得到了“merde!” 日志,所以这段代码肯定是执行的。 为什么核心运动不会调用我的处理程序? 我的iPhone 4function正常。 加速度计和陀螺仪在其他应用程序中完美工作。 没有硬件错误。

iOS设备的屏幕磁极方向是根据最大倾angular?

好吧,我不认为这个问题已经被问及,或者我的答案更快,或者一旦有了答案,我就会添加答案,因为我必须接近答案。 让我解释: 考虑iOS设备的俯仰和滚动(忘记偏航),我们有这样的angular度 * r+ * ———— * | | * p- ° |p+ * | | * ———— * r- 所以基于身体的参考框架。 我们知道,当俯仰或滚转为0时,另一个是设备的最大倾angular。 但是当这个装置有倾斜的时候,我们需要去四元数,下面的答案会使我们屏幕正常。 https://stackoverflow.com/a/10836923/2332101 具有垂直参考vector的法向量将给我们最大的倾斜度。 因此,为了得到在CLHeading中提供的航向方向投影在水平面上的法向vector,(称为x轴,因为它是iOS主体框架坐标)和CLHeading的x之间的angular度应该给我们正确的磁场标题(忘记真正的标题)。 在这个例子中: * * ———— * | | * ° |-> (magnetic heading) * | | * —–|—— * v (max inclination example where p = 0) 所以在上面的例子中,我们知道它是CLHeading.magneticHeading + […]

iOS CMMotionActivity Manager,汽车停车时如何检测停车标志?

我正在开发一个用于检测用户当前动作的项目,并使用包含“固定”,“行走”,“汽车”,“跑步”等动作的CMMotionActivityManager。 现在有一个要求,我需要知道人们停放汽车的位置。 但事情是,我只需要最后停车的位置。 如何消除停车标志的影响。 因为人们开车时总是停下来。 如果汽车停止,那么状态将是'静止的,1,行走0,跑步0,汽车1,骑车0, 如果汽车处于汽车运动状态:“静止的,0,走的,0的,跑的,0,汽车的,1,骑车的,0” 如果汽车处于静止运动:“静止的,1,行走0,跑步0,汽车0,骑车0, 这是代码的一部分: if (activity.automotive && activity.stationary) { //stop signs status } if (activity.automotive && !activity.stationary) { //automotive } if (!activity.automotive && activity.stationary && activity.confidence == CMMotionActivityConfidenceHigh) { //stationary with a high confidence } 但是系统不能那么敏感,不能确定用户是停下来停车还是停车。 由于它不够灵敏,如果人们最终停下车,我不知道如何提高检测的准确性。

计算加速度(驾驶汽车)

我试图复制加速计算像应用程序“Dynolicious”,但我不知道该去哪里计算这个。 我使用Core Motion还是使用其他数字进行计算? 我已经尝试过使用Core Motion的userAcceleraion值,但它并不像我想要的那样出来。 coreMotion = [[CMMotionManager alloc]init]; [coreMotion startDeviceMotionUpdates]; //then every second it updates my label… NSString *accel = [NSString stringWithFormat:@"%f", [[coreMotion accelerometerData]acceleration].x]; accelerationLabel.text = accel; 即我想我的价值出来,如0.4,-0.4等

如何使用转换来旋转UIView

我有一个UIView ,我正在尝试使用您可以从coremotion态度获得的音高值进行转换(旋转)。 我正在使用转换,但我不知道我的代码是正确的,因为UIView没有做任何事情。 这是我的代码被称为每秒几次。 – (void)setLabelValueRoll:(double)roll pitch:(double)pitch yaw:(double)yaw { self.yLabel.text = [NSString stringWithFormat:@"pitch: %f", pitch]; CATransform3D transform; transform = CATransform3DMakeRotation(pitch + M_PI_2, 1, 0, 0); self.wapaA.layer.sublayerTransform = transform; } 诚实地说,我不确定如何设置这个部分(pitch + M_PI_2,1,0,0)来使得我的squar UIView的音高效果,所以当我们来回倾斜手机的时候,我会保持水平。 任何帮助,将不胜感激。

iPhone上的CoreMotion Bump vs. Shake

我试图检测用户碰撞另一个物体的时间与刚刚抖动手机的时间。 我似乎无法像我想要的那样完美地工作,因为它要么登记过多的颠簸,要么没有颠簸,要么认为摇动是一个颠簸。 有人可以看看我的代码,并提供build议吗? 我需要确定一个或另一个发生。 // SHAKING – (void) motionEnded: (UIEventSubtype) motion withEvent:(UIEvent *)event { if (motion == UIEventSubtypeMotionShake) { [self setNumberOfShakes: [self numberOfShakes] + 1]; [self reloadAllTapShakeData]; } } // TAPPING & BUMPING – (void) setupAccelerometerMonitoring { [self setManager: [[CMMotionManager alloc] init]]; if ([[self manager] isDeviceMotionAvailable]) { [[self manager] setDeviceMotionUpdateInterval: 0.02]; [[self manager] startDeviceMotionUpdatesToQueue: [NSOperationQueue […]

更新来自陀螺仪的旋转数据相对于预定义的方向?

通常,来自陀螺仪y轴的旋转数据相对于手机的垂直方向进行更新。 但是,如果这个方向稍微改变,如图所示,是否有任何方法,我可以把y旋转分量垂直轴(手机的垂直方向位置),(这是可能的线性组件通过使用余弦angular正弦angular)但是旋转呢? 无论如何,我可以做到这一点?