- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当设备向前、向后、向右、向左倾斜时,我正在使用 CMMotionManager 在我的 View 上移动按钮、图像等。我得到姿态俯仰和滚动,然后使用它们将值分配给代表屏幕上像素位置的字符串。
这是我获取信息的方式
motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 0.05f;
[motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:motion.attitude.roll /8]];
numberString1 = [formatter stringFromNumber:[NSNumber numberWithFloat:motion.attitude.pitch /8]];
}];
NSString *deltax = numberString;
NSString *deltay = numberString1;
NSLog(@"xString;%@",numberString);
if ([deltax isEqualToString:@"-0.01"]) {
xString = @"160";}
else if ([deltax isEqualToString:@"-0.02"]) {
xString = @"161";}
else if ([deltax isEqualToString:@"-0.03"]) {
xString = @"162";}
else if ([deltax isEqualToString:@"-0.04"]) {
xString = @"163";}
//x axis
if ([deltax isEqualToString:@"-0.01"]) {
xString = @"160";}
else if ([deltax isEqualToString:@"-0.02"]) {
xString = @"161";}
else if ([deltax isEqualToString:@"-0.03"]) {
xString = @"162";}
else if ([deltax isEqualToString:@"-0.04"]) {
xString = @"163";}
else if ([deltax isEqualToString:@"-0.37"]) {
xString = @"156";}
else if ([deltax isEqualToString:@"-0.38"]) {
xString = @"157";}
else if ([deltax isEqualToString:@"-0.39"]) {
xString = @"158";}
else if ([deltax isEqualToString:@"-0.4"]) {
xString = @"159";}
else if ([deltax isEqualToString:@"0.01"]) {
xString = @"159";}
else if ([deltax isEqualToString:@"0.02"]) {
xString = @"158";}
else if ([deltax isEqualToString:@"0.03"]) {
xString = @"157"; }
else if ([deltax isEqualToString:@"0.04"]) {
xString = @"156";}
else if ([deltax isEqualToString:@"0.37"]) {
xString = @"163";}
else if ([deltax isEqualToString:@"0.38"]) {
xString = @"162";}
else if ([deltax isEqualToString:@"0.39"]) {
xString = @"161";}
else if ([deltax isEqualToString:@"0.4"]) {
xString = @"160";}
//y axis
if ([deltay isEqualToString:@"-0.01"]) {
yString = @"284";}
else if ([deltay isEqualToString:@"-0.02"]) {
yString = @"285";}
else if ([deltay isEqualToString:@"-0.03"]) {
yString = @"286";}
else if ([deltay isEqualToString:@"-0.04"]) {
yString = @"287";}
else if ([deltay isEqualToString:@"-0.17"]) {
yString = @"300"; }
else if ([deltay isEqualToString:@"-0.18"]) {
yString = @"301";}
else if ([deltay isEqualToString:@"-0.19"]) {
yString = @"302";}
else if ([deltay isEqualToString:@"-0.2"]) {
yString = @"303";}
else if ([deltay isEqualToString:@"0.01"]) {
yString = @"283";}
else if ([deltay isEqualToString:@"0.02"]) {
yString = @"282";}
else if ([deltay isEqualToString:@"0.03"]) {
yString = @"281";}
else if ([deltay isEqualToString:@"0.04"]) {
yString = @"280"; }
else if ([deltay isEqualToString:@"0.17"]) {
yString = @"267";}
else if ([deltay isEqualToString:@"0.18"]) {
yString = @"266";}
else if ([deltay isEqualToString:@"0.19"]) {
yString = @"265";}
else if ([deltay isEqualToString:@"0.2"]) {
yString = @"264";}
//used to assign numerical values
NSString *string2 = xString;
int n = [string2 intValue];
NSLog(@"n:%d",n);
NSString *string3 = xString1;
int p = [string3 intValue];
NSLog(@"p:%d",p);
NSString *string4 = yString;
int q = [string4 intValue];
NSLog(@"q:%d",q);
NSString *string5 = yString1;
int r = [string5 intValue];
NSLog(@"r:%d",r);
//used to move the buttons etc.
imageView2.center = CGPointMake(p, q);
imageView.center = CGPointMake(n -63, q);
imageframe.center = CGPointMake(n -63, q);
textView.center = CGPointMake(n -62, q - 184);
label1.center = CGPointMake(n + 97, q - 195 );
english.center = CGPointMake(n + 97, q - 159);
最佳答案
几个 react :
gravity
而不是 attitude
,因为它很好地代表了设备的物理方向。 if
语句,只是有一个公式来表示应该如何放置 View 。 UIView
(通常称为“容器 View ”,不要与 IB 中的同名自定义容器控件混淆)然后只需移动容器 View 即可。 @property (nonatomic, strong) CMMotionManager *motionManager;
@property CGFloat top;
@property CGFloat left;
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.deviceMotionUpdateInterval = 0.05f;
self.top = self.topConstraint.constant;
self.left = self.leadingConstraint.constant;
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
self.leadingConstraint.constant = self.left - motion.gravity.x / 8.0 * 100.0;
self.topConstraint.constant = self.top - motion.gravity.y / 8.0 * 100.0;
}];
@property (nonatomic, strong) CMMotionManager *motionManager;
@property CGPoint originalCenter;
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.deviceMotionUpdateInterval = 0.05f;
self.originalCenter = self.containerView.center;
[self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMDeviceMotion *motion, NSError *error) {
self.containerView.center = CGPointMake(self.originalCenter.x - motion.gravity.x / 8.0 * 100.0, self.originalCenter.y - motion.gravity.y / 8.0 * 100.0);
}];
NSOperationQueue
对于运动更新,只更新一些类属性; (b) 使用
CADisplayLink
(QuartzCore.framework 的一部分)来更新 View (如果需要)。因此:
@property (nonatomic, strong) CMMotionManager *motionManager;
@property (nonatomic, strong) NSOperationQueue *motionQueue;
@property (nonatomic) CMAcceleration gravity;
@property (nonatomic) CGPoint originalCenter;
@property (nonatomic) BOOL updatePosition;
@property (nonatomic, strong) NSMutableArray *angles;
@property (nonatomic, strong) CADisplayLink *displayLink;
- (void)viewDidDisappear:(BOOL)animated
{
[self stopDisplayLink];
[self.motionManager stopDeviceMotionUpdates];
self.motionManager = nil;
self.motionQueue = nil;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.deviceMotionUpdateInterval = 0.05f;
self.motionQueue = [[NSOperationQueue alloc] init];
self.motionQueue.name = [[[NSBundle mainBundle] bundleIdentifier] stringByAppendingString:@".motion"];
self.originalCenter = self.containerView.center;
self.updatePosition = NO;
[self.motionManager startDeviceMotionUpdatesToQueue:self.motionQueue withHandler:^(CMDeviceMotion *motion, NSError *error) {
@synchronized(self) {
self.gravity = motion.gravity;
self.updatePosition = YES;
}
}];
[self startDisplayLink];
}
- (void)startDisplayLink
{
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleDisplayLink:)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)stopDisplayLink
{
[self.displayLink invalidate];
self.displayLink = nil;
}
- (void)handleDisplayLink:(CADisplayLink *)displayLink
{
@synchronized(self) {
if (!self.updatePosition)
return;
self.containerView.center = CGPointMake(self.originalCenter.x - self.gravity.x / 8.0 * 100.0, self.originalCenter.y - self.gravity.y / 8.0 * 100.0);
self.updatePosition = NO;
}
}
关于iphone - 使用 CMMotionManager iPhone 的生涩 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18729788/
我已经设法使用 CLLocationManager 获取罗盘航向,但因为我的应用程序已经使用 CMMotionManager,所以我想仅使用 CMMotionManager 来测量航向。 与所有 Ap
我有一个串行队列,以 0.01 秒的间隔接收陀螺仪和加速度计运动更新。 从日志中我可以看到两个 block 在不同的线程上执行,因为 NSMutableArray 不是线程安全的,而且我还修改了两个
我在我的应用程序中使用 CMMotionManager 以便获取设备运动信息。我有这两种方法: - (void)startDeviceMotion { motionManager = [[CM
我正在开发一个应用程序,当用户打开时会有一个图像,由 CMMotionManager 控制,它会根据用户倾斜设备的方向移动。 .. .. 这是我启动设备运动的代码。 motionManager = [
我正在使用 CMMotionManager 的 startAccelerometerUpdatesToQueue:withHandler: 方法来获取加速度计更新,我正在创建队列,这是我的代码行 [s
我想要完成的是将 UIImageView 移动到 iPhone 屏幕的顶部边缘,然后继续向上移动它,但是一旦图像通过顶部边缘,它就会出现在屏幕底部,因为它继续移动通过。也让向右和从右向左 它将通过 A
我正在为我的公司开发一个 AR 应用程序,它运行顺利,除了大约十分之一的设备。 (所有 iphone 4 和 4s,5.1.1+) 当我们运行这段代码时: CMDeviceMotion *d = mo
假设您将 iPhone/iPad 竖直放在面前,屏幕朝向您,纵向。您将设备倾斜到一侧,让屏幕面向您。您如何使用 CMMotionManager 测量静态倾斜角度?这似乎是一个应该有一个简单答案的简单问
是否有人知道 CMMotionmanager.deviceMotion 的每个属性及其子属性,它们基于哪种硬件(磁力计、加速度计、陀螺仪等)? 我的问题是关于硬件,而不是软件。 我需要知道 CMMot
我是 iOS 开发新手。 我按照 Ray Wenderlich 的教程进行操作创建一个基于位置的小型 AR 应用程序。但是,本教程使用 AR Toolkit已经有一段时间没有更新了。它使用的 UIAc
我创建了一个带有 physicsBody edgeFromLoop 循环的 SKNode,我在其中添加了 8 个小圆形节点。 8 个圆形节点在父圆形节点内使用 CMMotionManager 移动。随
我正在记录从 CMMotionManager deviceMotion 获得的“态度”值在 CADisplayLink 回调中(我需要根据设备旋转执行动画)。 这些值似乎每隔几毫秒就会有很大程度的“抽
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
从 CMMotionManager 获取数据非常简单,处理起来并不多。 有没有人有任何关于相对准确地检测步骤(并忽略较小的移动)的代码的指示或关于如何处理此类事情的一般方向的指南? 最佳答案 您基本上
我有一个名为 Balloon 的单独 SKNode 类,如下所示。 import Foundation import SpriteKit class Balloon: SKNode { ini
我从 Objective-C 中获得了以下代码,它运行良好。 _motionManager = [[CMMotionManager alloc] init]; _motionManager.gyroU
我一直在研究 AR framework现在有一段时间了,我正在努力update from UIAccelerometer (deprecated) to CMMotionManager但遇到了一些效率
我一直在寻找一种方法来为加速度计在我的游戏中跟踪玩家移动的方式添加偏移量。在我的游戏中,您通过前后倾斜手机来控制玩家角色。这由加速度计转换为屏幕上的 x 和 y 坐标。不幸的是,这意味着为了阻止角色一
当设备向前、向后、向右、向左倾斜时,我正在使用 CMMotionManager 在我的 View 上移动按钮、图像等。我得到姿态俯仰和滚动,然后使用它们将值分配给代表屏幕上像素位置的字符串。 这是我获
我正在使用 CMMotionManger 通过以下代码获取偏航读数。无论 UIInterfaceOrientation 如何,如果向右偏航 90 度,我都会尝试获取负 1.5708 rad 的读数;如
我是一名优秀的程序员,十分优秀!