Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 所有视图控制器中的抖动事件检测_Iphone_Objective C_Ios_Oop_Events - Fatal编程技术网

Iphone 所有视图控制器中的抖动事件检测

Iphone 所有视图控制器中的抖动事件检测,iphone,objective-c,ios,oop,events,Iphone,Objective C,Ios,Oop,Events,这在iOS中是可能的,还是我真的必须在每个视图控制器中注册一个抖动事件检测 我希望我的应用程序的用户可以摇动他的iPhone回到根目录。不考虑当前视图控制器。编辑的帖子(旧信息错误) 在您的情况下,我将编写自己的ViewController,该ViewController子类为UIViewController,实现UIResponder的运动委托,然后调用ViewController的navigationController-属性上的PoptrootViewController。每次创建新的Vi

这在iOS中是可能的,还是我真的必须在每个视图控制器中注册一个抖动事件检测

我希望我的应用程序的用户可以摇动他的iPhone回到根目录。不考虑当前视图控制器。

编辑的帖子(旧信息错误)


在您的情况下,我将编写自己的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,但它可能违反了规定。作为一个用户,我会觉得这很烦人。我希望你添加一个设置来关闭它,如果你决定继续走这条路的话!我想我会添加一个设置来停用它。