使用UIDeviceOrientationDidChangeNotification时,iOS设备在正确位置时不会做出反应

时间:2013-01-05 02:28:43

标签: ios uideviceorientation

我有一个应用程序,当用户更改设备的位置时,我正在让我的iOS设备发出声音。我让用户将设备放在平面位置,横向位置,然后是纵向位置,当用户在适当的时间将设备放在这些位置时,应用会发出声音来确认位置。

然而我的问题是,如果设备最初处于平坦位置(例如平放在桌子上),则设备不发出声音。换句话说,仅当用户将设备放在该位置并且不立即感测它已经处于的位置时才发出声音。有没有办法让我纠正这个问题,如果应用程序最初处于该位置或被置于正确的位置,它会发出声音?这是我的相关代码:

- (void) orientationCheck {

    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(orientationChanged:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:[UIDevice currentDevice]];

    timer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(showTextOnly) userInfo:nil repeats:NO];
}


- (void) orientationChanged:(NSNotification *)note
{
    UIDevice *device = note.object;

    if(currentTest == flatTest) {

        testLabel.frame = CGRectMake(50, 30, 200, 150);
        [testLabel setText:@"Hold device on its side."];
        testImage.frame = CGRectMake(10, 150, 300, 200);
        testImage.image = [UIImage imageNamed:@"accelerometer test - side.png"];

        if (device.orientation == UIDeviceOrientationFaceUp || device.orientation == UIDeviceOrientationFaceDown) {

           ...

        }

    }

任何人都可以看到我做错了什么,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

为什么不在发布时检查设备的方向?换句话说,除了在设备方向更改时注册通知外,还要查看设备方向