UIAccelerometer, ViewControllers, and TabViewController, tabs 和 MotionBegan 之间的切换没有被调用

Posted

技术标签:

【中文标题】UIAccelerometer, ViewControllers, and TabViewController, tabs 和 MotionBegan 之间的切换没有被调用【英文标题】:UIAccelerometer, ViewControllers, and TabViewController, switching between tabs and MotionBegan not called 【发布时间】:2011-04-30 11:50:17 【问题描述】:

所以我有一个基于 TabBarController 的应用程序,并且在我的一个选项卡中使用 UIAccelerometer。我看到的问题是我可以很好地访问和使用加速度计,直到我切换标签并切换回来。比如说我的加速度计在 tab1 上,然后我单击 tab2 并返回到 tab1 加速度计是关闭的。

在我的 ViewWillAppear 方法中,我将 viewcontroller 设置为 firstresponder,如下所示:

- (void)viewWillAppear:(BOOL)animated

[super viewWillAppear:animated];

[self becomeFirstResponder];

[accelerometer setDelegate:self];
...

加速计是视图控制器的实例变量。所以我在http://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/EventHandlingiPhoneOS.pdf阅读本指南,如果你将加速度计代表设置为零,手机将关闭它以节省电池寿命。请注意,我从 viewWillDisappear: 方法中删除了那行代码,该方法现在非常小:

-(void)viewWillDisappear:(BOOL)animated

[super viewWillDisappear:animated];
    //commented out the line below and no dice
    //[accelerometer setDelegate:nil];

if([[self tableView]isEditing])
    [[self tableView]setEditing:NO];
[self resignFirstResponder];

细读 SO 和网络导致这方面的信息很少。我可以在这里提供的唯一其他信息是,如果我来回切换选项卡,我可以向后导航一页(它也有一个 navigationController 并且是导航中的最后一页)并转发加速度计然后正常工作。在我看来,它并没有真正将视图控制器设置为第一响应者。我希望有一些明显的事情我没有到达这里。任何帮助将不胜感激!!!

【问题讨论】:

【参考方案1】:

所以事实证明,我需要在我的 viewController 中重写 viewDidAppear 和 viewDidDisappear 方法。

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

- (void)viewDidDisappear:(BOOL)animated 
[self resignFirstResponder];
[super viewDidDisappear:animated];

完成此操作后,在视图控制器之间切换后调用了motionBegan。希望这对那里的任何人都有帮助...

【讨论】:

以上是关于UIAccelerometer, ViewControllers, and TabViewController, tabs 和 MotionBegan 之间的切换没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

如何校准 UIAccelerometer?

UIAccelerometer 和 UIScrollView

UIAccelerometer 已弃用 ios7

UIAccelerometer 和 UIScrollView

iPhone中的UIAccelerometer

UIAccelerometer 在摇晃