如何防止特定视图响应抖动手势?

问题描述:

我对我的应用程序使用摇动手势,但我有问题!如何防止特定视图响应抖动手势?

我的应用程序是多视点应用,我想在视图中使用摇晃手势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''主要view'或兄弟姐妹的子视图? – TechZen 2009-11-07 17:16:34

+0

你UIAccelerometer代表哪个对象? – TechZen 2009-11-07 17:20:41

好吧,我解决我的问题与此代码:

#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]; 



     } 
    } 
} 

我假设你的代码是从你的第二个视图(要应对摆动姿态的一个)的视图控制器。在这种情况下,你只需要辞职-viewWillDisappear这个视图控制器第一响应状态:然后

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self resignFirstResponder]; 
} 

第二个视图控制器将停止响应动摇手势。

+0

嗨,布拉德!我改变了viewDidAppear viewWillDisappear并没有发生。这里是我的示例代码可以解决我的问题吗? :)请 http://rapidshare.com/files/303744589/ShakeIt.zip.html – Momi 2009-11-07 19:05:25

+0

我发现了一些东西!我的代码只能在MainviewController(我的原始appViewController)中工作,如果我不在MyView2Controller.m或任何viewController文件上写任何代码.... Alert只会在任何视图上显示MainviewController! – Momi 2009-11-07 21:22:38