在阅读了一些关于在3.0上实现抖动的帖子后,我想我明白了,但我没有接到任何电话:
motionBegan motionEnded motionCancelled
这是我读过的一个例子: how to detect and program around shakes for the iphone
我确定我添加了
[self becomeFirstResponder];
和
-(BOOL)canBecomeFirstResponder {
NSLog(@"First responder");
return YES;
}
我应该为这些事件启用特殊委托吗?
据我所知,这些事件是由系统控制的,然后传递给第一响应者,继续......
任何想法?
感谢,
河
答案 0 :(得分:1)
我有很多问题让这个工作,我终于放弃并遵循jandrea的建议。他建议继承UIWindow并在那里实现motionEnded。这是他的帖子here的引用,在相当远的地方寻找它。
首先,我将UIWindow子类化。这是 十分简单。创建一个新的类文件 使用MotionWindow等界面 :UIWindow(随意挑选你的 拥有,自然)。添加如下方法:
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeviceShaken" object:self];
}
}
将@“DeviceShaken”更改为 您选择的通知名称。保存 文件。
现在,如果您使用MainWindow.xib (股票Xcode模板的东西),进去 在那里改变你的班级 从UIWindow到的Window对象 MotionWindow或你叫的任何东西 它。保存xib。如果你设置了 UIWindow以编程方式使用您的 而是新的Window类。
现在您的应用正在使用专业版 UIWindow类。无论你想去哪里 被告知摇一摇,报名参加 他们通知!像这样:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceShaken) name:@"DeviceShaken" object:nil];
以观察者身份移除自己:
[[NSNotificationCenter defaultCenter] removeObserver:self];
答案 1 :(得分:0)
你在哪里打becomeFirstResponder
?你应该在viewDidAppear
中做到这一点。这会被解雇吗?