gpt4 book ai didi

iphone - 检测何时摇动 iPhone

转载 作者:行者123 更新时间:2023-12-03 20:29:50 26 4
gpt4 key购买 nike

我对之前发布的抖动检测有疑问,这里有一个提醒:

“现在……我想做类似的事情(在 iPhone OS 3.0+ 中),只是在我的情况下,我希望在应用程序范围内使用它,这样当发生震动时我可以向应用程序的各个部分发出警报。这就是我的结论起来做。

首先,我对 UIWindow 进行了子类化。这很容易。使用 MotionWindow : UIWindow 等界面创建一个新的类文件(当然,可以随意选择自己的界面)。添加一个像这样的方法:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event {
if (event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeviceShaken" object:self];
}
}

现在,如果您使用 MainWindow.xib(普通 Xcode 模板内容),请进入那里并将 Window 对象的类从 UIWindow 更改为 MotionWindow 或您所称的任何名称。拯救xib。如果您以编程方式设置 UIWindow,请改用新的 Window 类。

现在您的应用程序正在使用专门的 UIWindow 类。无论您想在哪里得知震动的消息,请注册接收通知!像这样:

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceShaken) name:@"DeviceShaken" object:nil];

要删除自己作为观察者的身份:

[[NSNotificationCenter defaultCenter] removeObserver:self];

问题:

  1. 将通知放在哪里(我有一个基于 View 的应用程序)?
  2. 我是否必须将自己从观察者中删除,这是什么意思?
  3. 我用来检查摇晃是否发生的 if 语句是什么?
  4. 我如何知道摇动事件是否知道它“已经在进行中”?

谢谢。

最佳答案

iPhone OS 3.x中,从设置为第一响应者的任何 View 接收运动事件都很简单。

在您的 View 类中重写方法motionEnded:,如下所示:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if(motion == UIEventSubtypeMotionShake && [self isViewLoaded])
{
//handle shake here...
}
}

此外,当 View 加载并出现时,您需要成为第一响应者:

- (void)viewDidAppear:(BOOL)animated
{
[self becomeFirstResponder];
[super viewDidAppear:animated];

//any extra set up code...
}

您可能还需要响应 canBecomeFirstResponder 方法。

- (BOOL)canBecomeFirstResponder 
{
return YES;
}

这些可以在继承 UIView 的任何对象中使用。

关于iphone - 检测何时摇动 iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1860350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com