3

我正在开发一个应用程序,该应用程序会为用户持有其 iOS 设备的每个位置(站立、正面/背面或侧面)播放哔声。目前,当用户将设备放在一边时,我可以播放声音,但是,问题是因为我有与滑块链接的加速度计值,所以哔哔声是连续的(即它播放声音为只要用户将设备侧放),而不仅仅是一次。

我希望用户只需将设备稳定地放在一边,然后发出一声哔哔声,然后让用户将设备依次保持在其他位置,然后等待另一声哔哔声。我希望用户一步一步地走,一次一个地把设备放在每个位置,只有在听到哔哔声后才能移动到下一个位置。

这是我正在使用的代码:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{

    NSLog(@"(%.02f, %.02f, %.02f)", acceleration.x, acceleration.y, acceleration.z);
    slider.value = acceleration.x;

    if (slider.value == -1)
        [self pushBeep];

    else if (slider.value == 0.00)
        [self pushBap];

    else if (slider.value == 1)
        [self pushBop];

...

这是我的 pushBeep() 方法的代码(仅供参考,方法 pushBeep/pushBap/pushBop 都是相同的):

-(void) pushBeep {

    NSString *soundPath =[[NSBundle mainBundle] pathForResource:@"beep-7" ofType:@"wav"];
    NSURL *soundURL = [NSURL fileURLWithPath:soundPath];

    NSError *ierror = nil;
    iPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&ierror];

    [iPlayer play];
}

谁能弄清楚这里有什么问题?

4

2 回答 2

2

我认为您应该使用内置的方向通知,而不是手动轮询加速度计。如果您需要 FaceUp 和 FaceDown 方向,您可以使用类似下面的方法。或者您可以使用第二种方法来简单地横向、纵向。

第一种依赖于设备方向的方法。如果您需要 FaceUp 或 FaceDown 方向,或者如果您没有 UIViewController,这很重要。

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

这是构建的方法。

- (void) orientationChanged:(NSNotification *)note
{
   UIDevice * device = note.object;
   switch(device.orientation)
   {
       case UIDeviceOrientationPortrait:
       /* Play a sound */
       break;

       case UIDeviceOrientationPortraitUpsideDown:
       /* Play a sound */
       break;

       // ....

       default:
       break;
   };
}

依赖于 UIViewController 的 interfaceOrientations 的第二种方法。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    switch (toInterfaceOrientation) {
        case UIInterfaceOrientationLandscapeLeft:
            /* Play a Sound */
            break;

        case UIInterfaceOrientationPortrait:
            /* Play a Sound */
            break;

            // .... More Orientations

        default:
            break;
    }
}
于 2012-12-05T17:48:33.600 回答
0

加速度计来自加速这个词——它不会告诉你设备的方向,它只会告诉你它在 x、y 和 z 轴上在空间中移动的速度。使用 UIInterfaceOrientation && UIDeviceOrientation。

于 2013-01-02T21:09:00.083 回答