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 和 UIScrollView