您好 当用户移动设备时,我希望灵敏度发生变化。目前它不是很敏感,我相信它默认。我希望它更敏感,所以当用户摇动手机时会播放一些声音。
这是代码
由于
- (BOOL)canBecomeFirstResponder
{
return YES;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if(motion == UIEventSubtypeMotionShake)
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"whip" ofType:@"wav"];
if (theAudio) [theAudio release];
NSError *error = nil;
theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
if (error)
NSLog(@"%@",[error localizedDescription]);
theAudio.delegate = self;
[theAudio play];
}
}
答案 0 :(得分:4)
首先,确保您的界面采用UIAccelerobeterDelegate协议。
@interface MainViewController : UIViewController <UIAccelerometerDelegate>
现在在您的实施中:
//get the accelerometer
self.accelerometer = [UIAccelerometer sharedAccelerometer];
self.accelerometer.updateInterval = .1;
self.accelerometer.delegate = self;
实施委托方法:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
float x = acceleration.x;
float y = acceleration.y;
float b = acceleration.z;
// here you can write simple change threshold logic
// so you can call trigger your method if you detect the movement you're after
}
加速度计为x,y和z返回的值将始终为介于-1.0和正1.0之间的浮点数。您应该调用NSLog并输出到控制台的x,y和z值,这样您就可以了解它们的含义。然后你可以开发一种检测运动的简单方法。
答案 1 :(得分:0)
您无法更改震动事件的工作方式。如果你需要不同的东西,你必须根据[UIAccelerometer sharedAccelerometer]给你的x / y / z力编写自己的摇动检测代码;如果您将sharedAccelerometer的委托设置为您的类,您可以获取加速度计的加速度计:didAccelerate:委托回调。
答案 2 :(得分:0)
如果您正在尝试重新创建摇晃手势,请记住以下几点:
摇动是指向一个方向的运动,然后是沿大致相反方向的运动。这意味着您必须跟踪以前的加速度矢量,以便了解它们何时发生变化。所以你不要错过它,你必须经常从加速度计中取样。
CGFloat samplesPerSecond = 30;
[[UIAccelerometer sharedAccelerometer] setDelegate: self];
[[UIAccelerometer sharedAccelerometer] setUpdateInterval: 1.0 / samplesPerSecond];
然后在你的委托回调中:
- (void) accelerometer: (UIAccelerometer *) accelerometer didAccelerate: (UIAcceleration *) acceleration {
// TODO add this acceleration to a list of accelerations and keep the most recent (perhaps 30)
// TODO analyze accelerations and determine if a direction change occurred
// TODO if it did, then a shake occurred! Clear the list of accelerations and perform your action
}