如何防止特定视图响应摇晃手势?
Posted
技术标签:
【中文标题】如何防止特定视图响应摇晃手势?【英文标题】:How do I prevent a specific view from responding to shake gestures? 【发布时间】:2009-11-07 15:56:23 【问题描述】:我在我的应用程序中使用了摇晃手势,但我遇到了问题!
我的应用程序是一个多视图应用程序,我想在视图 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];
【问题讨论】:
view 2
是 Main view
的子视图还是兄弟?
你UIAccelerometer
代理是哪个对象?
【参考方案1】:
我假设您的代码来自第二个视图的视图控制器(您想要响应摇动手势的那个)。在这种情况下,您只需在 -viewWillDisappear 中为该视图控制器退出第一响应者状态:
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
[self resignFirstResponder];
第二个视图控制器将停止响应摇动手势。
【讨论】:
嗨布拉德!我将 viewDidAppear 更改为 viewWillDisappear 并且没有发生任何事情。这是我的示例代码你能解决我的问题吗? :)请rapidshare.com/files/303744589/ShakeIt.zip.html 我发现了一些东西!我的代码仅适用于 MainviewController(我的原始 appViewController),如果我不在 MyView2Controller.m 或任何 viewController 文件上编写任何代码......警报仅在任何视图上显示 MainviewController!【参考方案2】:好的,我用这段代码解决了我的问题:
#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];
【讨论】:
以上是关于如何防止特定视图响应摇晃手势?的主要内容,如果未能解决你的问题,请参考以下文章