Iphone 所有视图控制器中的抖动事件检测
这在iOS中是可能的,还是我真的必须在每个视图控制器中注册一个抖动事件检测 我希望我的应用程序的用户可以摇动他的iPhone回到根目录。不考虑当前视图控制器。编辑的帖子(旧信息错误)Iphone 所有视图控制器中的抖动事件检测,iphone,objective-c,ios,oop,events,Iphone,Objective C,Ios,Oop,Events,这在iOS中是可能的,还是我真的必须在每个视图控制器中注册一个抖动事件检测 我希望我的应用程序的用户可以摇动他的iPhone回到根目录。不考虑当前视图控制器。编辑的帖子(旧信息错误) 在您的情况下,我将编写自己的ViewController,该ViewController子类为UIViewController,实现UIResponder的运动委托,然后调用ViewController的navigationController-属性上的PoptrootViewController。每次创建新的Vi
在您的情况下,我将编写自己的ViewController,该ViewController子类为
UIViewController
,实现UIResponder
的运动委托,然后调用ViewController的navigationController
-属性上的PoptrootViewController
。每次创建新的ViewController时,都应该对ViewController进行子类化,而不是UIViewController
。因此,每个ViewController都能够接收shake事件,但它在代码中只写入一次:)我通过在UIViewController上写入一个类别来实现这一点。通过这种方式,您不需要对任何内容进行子类化,即使用户界面已经完成,您也可以实现它
在我的实现中,除非特定VC选择退出该机制,否则VCs将对震动作出响应。通过在特定实现中将BOOL ivar设置为NO来完成选择out。抖动机制将使用键值编码查找此ivar,如果已设置ivar,则忽略抖动
我将进一步完善这一点,只允许VC响应当前可见的内容。这只是一个猜测,但也许您可以通过对UIApplication(而不是您的应用程序委托,即实际的应用程序)进行子类化来实现。UIApplication是UIResponder,因此您可以将其作为第一个响应程序,并在其上提供MotionBegind或MotionEnd方法。只是一些建议,如果用户将手机扔到床上或侧翻,手机会记录为抖动,这可能会很烦人。我还没有检查关于这个具体案例的HIG,但它可能违反了规定。作为一个用户,我会觉得这很烦人。我希望你添加一个设置来关闭它,如果你决定继续走这条路的话!我想我会添加一个设置来停用它。