我无法在iPhone上获得震动事件。
我在这里跟随其他问题没有结果。我也尝试过关注Apple的GLPaint示例,但它看起来与我的源代码完全一样,但差别很小。 GLPaint的源代码/ works /,我的/没有/.
所以,这就是我所拥有的:
Controller.m或者
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeEnded) name:@"shake" object:nil];
}
ShakingEnabledWindow.m
- (void)shakeEnded {
NSLog(@"Shaking ended.");
}
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (motion == UIEventSubtypeMotionShake ) {
// User was shaking the device. Post a notification named "shake".
[[NSNotificationCenter defaultCenter] postNotificationName:@"shake" object:self];
NSLog(@"Shaken!");
}
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event {
}
我的XIB有一个窗口,它是一个ShakingEnabledWindow和一个对象,我的控制器。
我这里的想法已经不多了,希望有人可以帮我一臂之力。 :)
答案 0 :(得分:1)
NSNotificationCenter的文档说:
<强>的addObserver:选择器:名称:对象:强> notificationSelector 选择器 指定接收者的消息 发送notificationObserver通知 它的通知发布。该 方法指定 notificationSelector 必须有一个和 只有一个参数(一个实例) NSNotification)。
所以你的shakeEnded方法是错误的,因为它不需要参数。它应该看起来:
- (void)shakeEnded:(NSNotification*)notiication {
NSLog(@"Shaking ended.");
}
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeEnded:) name:@"shake" object:nil];
}
答案 1 :(得分:1)
在viewDidAppear
中,成为第一个响应者:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self becomeFirstResponder];
}
确保你能成为第一响应者:
- (BOOL)canBecomeFirstResponder {
return YES;
}
然后你可以实现运动检测。
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.subtype == UIEventTypeMotion){
//there was motion
}
}
答案 2 :(得分:0)
我认为您错误地检查了动作类型。您需要检查event.subtype
而不是motion
:
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if ( event.subtype == UIEventSubtypeMotionShake ) {
// Put in code here to handle shake
}
}