代码之家  ›  专栏  ›  技术社区  ›  BadCode

使用iOS中的传感器检测面朝上的位置

  •  1
  • BadCode  · 技术社区  · 8 年前

    我想用传感器信息检测脸朝上的位置。如果iPhone的位置朝上,屏幕上名为btnOpen的按钮应该看起来,否则按钮应该隐藏。 我正在检查z值和区间[-0.8,-1.0]z值是否正确变化,但btnOpen。隐藏=是或否首次工作,然后不工作。我创建了一个标签来在屏幕上打印z值,但它首先写入z值,并且该值没有改变。 问题是什么?如何解决此问题?

    NSOperationQueue *theQueue = [[NSOperationQueue alloc] init];
    
        returnedData = [[CMAccelerometerData alloc] init];
        motionManager = [[CMMotionManager alloc] init];
    
        [motionManager startAccelerometerUpdatesToQueue:theQueue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
    
            returnedData = motionManager.accelerometerData;
    
            float z = returnedData.acceleration.z;
    
            NSLog(@"Z: %f", z);
    
            if(z > -1.0 && z < -0.8 ){
                btnOpen.hidden = NO;
            }
            else{
                btnOpen.hidden = YES;
            }
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Sten    8 年前
    - (void)viewDidLoad {
       [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:[UIDevice currentDevice]];
    }
    
    
    - (void)orientationChanged:(NSNotification *)note{
       UIDevice * device = note.object;
       //  NSLog(@"rotation main %d ",device.orientation;);
    
      switch(device.orientation){
        case 1:
            //Portrait
        break;
    
        case 4:
           //landscape right
        break;
    
        case 3:
            //landscape left
        break;
    
        default:
            //other orientations
        break;
       };
    }
    
        2
  •  0
  •   BadCode    8 年前

    我用定时定时器解决了这个问题。每0.5秒调用下面的方法并工作。

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        theQueue = [[NSOperationQueue alloc] init];
    
        returnedData = [[CMAccelerometerData alloc] init];
        motionManager = [[CMMotionManager alloc] init];
        [NSTimer scheduledTimerWithTimeInterval:0.5f
                                         target:self selector:@selector(checkPhonePosition:) userInfo:nil repeats:YES];
    
    }
    
    
    -(void)checkPhonePosition:(NSTimer *)timer {
    
    
        [motionManager startAccelerometerUpdatesToQueue:theQueue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
    
            returnedData = motionManager.accelerometerData;
    
            z = returnedData.acceleration.z;
    
            NSLog(@"Z: %f", z);
    
    
        }];
    
        if(z > -1.0 && z < -0.8 ){
            btnOpen.hidden = NO;
        }
        else{
            btnOpen.hidden = YES;
        }
    }