gpt4 book ai didi

ios - 需要在 iOS 中使用加速计的帮助

转载 作者:行者123 更新时间:2023-12-02 02:11:01 25 4
gpt4 key购买 nike

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

我希望用户只需将设备稳定地侧放,然后发出一声蜂鸣声,然后允许用户依次将设备保持在其他位置,并等待另一声蜂鸣声。我希望用户一步一步地将设备固定在每个位置,只有在听到蜂鸣声后才转到下一个位置。

这是我正在使用的代码:

- (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];
}

谁能弄清楚这里出了什么问题吗?

最佳答案

我认为您应该使用内置的方向通知,而不是手动轮询加速度计。如果您需要 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;
}
}

关于ios - 需要在 iOS 中使用加速计的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com