0

我对我的应用程序使用摇动手势,但我有问题!

我的应用程序是一个多视图应用程序,我想在视图 2 上使用摇动手势。如果我在视图 2 上激活摇动手势,我必须在 MainViewController.m 和 MyView2Controller.m 中编写以下代码才能使用摇动手势。

然后,如果我摇动 iphone,两个视图上都会显示警报,我不希望这样。我希望警报只显示在视图 2 中。因此,如果我停用 MainViewController.m 或视图 1 上的代码,它不再在视图 2 中工作!

任何帮助表示赞赏!

替代文字 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];

    }
}
4

2 回答 2

2

我假设您的代码来自第二个视图的视图控制器(您想要响应摇动手势的那个)。在这种情况下,您只需在 -viewWillDisappear 中为该视图控制器退出第一响应者状态:

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

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

于 2009-11-07T17:20:34.363 回答
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];



        }
    }
}
于 2009-11-07T21:32:12.000 回答