我正在开发一款应用程序,可以为用户持有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];
}
有谁可以弄清楚这里有什么问题?
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
加速度计来自单词加速 - 它不会告诉您设备的方向,它会告诉您它在x,y和z轴上空间移动的速度。 使用UIInterfaceOrientation&& UIDeviceOrientation。