我正在尝试做一个震动事件。 我试过了: 1)How do I detect when someone shakes an iPhone?(肯德尔和伊兰的帖子) 2)motionBegan: Not Working 但是没有帮助。 我的视图成为第一响应者,但motionBegan / motionEnded从未调用过。 是否必须完成一些additiol设置,或者我缺少一些东西?我的iOS SDK是4.3。
我有一类UIView:
#import "ShakeView.h"
@implementation ShakeView
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog (@"123");
if ( event.subtype == UIEventSubtypeMotionShake ) {
NSLog(@"Shake!");
}
if ([super respondsToSelector:@selector(motionEnded:withEvent:)]) {
[super motionEnded:motion withEvent:event];
}
}
@end
在我的ViewController中,View的xib类是ShakeView。 我的ViewController被推了:
Wheel *secondViewController = [[Wheel alloc] initWithNibName:@"Wheel" bundle:nil];
[self.navigationController pushViewController:secondViewController animated:YES];
[secondViewController release];
在我的ViewController中:
- (void) viewDidAppear:(BOOL)animated
{
[self.view becomeFirstResponder];
[super viewWillAppear:animated];
NSLog(@"%d", [self.view isFirstResponder]);
}
- (void) viewWillDisappear:(BOOL)animated
{
[self.view resignFirstResponder];
[super viewWillDisappear:animated];
}
它记录“1”,因此它是第一响应者。但它没有记录任何其他内容。
我在这几行代码上花了半天时间,我没有更多的想法。有谁知道如何解决它? 感谢。
答案 0 :(得分:1)
这对于帮助SentineL来说已经太晚了,但是我遇到了同样的问题,我喜欢他的问题,因为很明显他已经拥有了所有相关的代码 - 除了一个关键的行,在应用程序委托的{{ 1}}:
didFinishLaunching
这很难调试,因为即使没有这一行,其他一切都会很好。您的手势将起作用,您的控件将响应,您将能够使您的视图成为第一响应者(如SentineL选中) - 但您的子窗口或视图或视图控制器将永远不会收到动作事件。
这对我没有意义。为什么[self.window makeKeyAndVisible];
会影响加速度计但不会影响手势?希望一些更有经验的用户可以回答这个问题。
P.S。如果您使用此代码作为示例,我建议您省略makeKeyAndVisible
条件。 当然它响应选择器;你压倒了它。