我为我的应用程序使用摇动手势,但我有问题!
我的应用程序是一个多视图应用程序,我想在视图2上使用摇动手势。 如果我在视图2上激活摇动手势,我必须在MainViewController.m中编写下面的代码 和MyView2Controller.m使用摇动手势。
然后,如果我摇动iPhone,请在两个视图中提醒显示,我不希望这样。我希望警报只显示在视图2中。因此,如果我在MainViewController.m或视图1上禁用代码,它将不再适用于视图2!
任何帮助表示赞赏!
alt text http://www.freezpic.com/pics/98f1465147344642e3870bb599eba689.jpg
这是我的代码:
-(BOOL)canBecomeFirstResponder {
return YES;
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.subtype == UIEventSubtypeMotionShake)
{
UIAlertView *alet =[[UIAlertView alloc]initWithTitle:nil message:@"Shake shake shake" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alet show];
[alet release];
self.view.backgroundColor = [UIColor orangeColor];
}
}
答案 0 :(得分:2)
我假设您的代码来自第二个视图的视图控制器(您想要响应摇动手势的视图)。在这种情况下,您只需要在-viewWillDisappear中重新设置此视图控制器的第一个响应者状态:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self resignFirstResponder];
}
第二个视图控制器将停止响应摇动手势。
答案 1 :(得分:0)
好的,我用这段代码解决了我的问题:
#define kAccelerationThreshold 2.2
#define kUpdateInterval (1.0f/10.0f)
@interface info : UIViewController <UIAccelerometerDelegate> {
}
@end
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
@implementation info
- (void)viewDidLoad {
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
[super viewDidLoad];
}
#pragma mark -
- (void)accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration {
{
if (acceleration.x > kAccelerationThreshold
|| acceleration.y > kAccelerationThreshold
|| acceleration.z > kAccelerationThreshold) {
//What do you want to do !
self.view.backgroundColor = [UIColor orangeColor];
}
}
}