【问题标题】:Making UIAccelerometer work more than once when switching views切换视图时使 UIAccelerometer 工作不止一次
【发布时间】:2011-04-18 14:10:29
【问题描述】:

我需要帮助解决问题,但不知道如何解决。基本上我有一个使用加速度计切换到另一个视图的视图,问题是它只能工作一次。当我回到第一个视图时,加速度计将无法再次工作,直到我重建项目。

这是我使用的方法:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {     
float aX = ABS(acceleration.x);
float aY = ABS(acceleration.y);
float aZ = ABS(acceleration.z);
if(sqrt(aX*aX+aY*aY+aZ*aZ)>1.5f)
{
    SecondViewController *screen = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
    screen.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    //screen.words = self.easy;
    [self presentModalViewController:screen animated:YES];
    [screen release];
self.accelerometer.delegate = nil;  
}

我们将不胜感激任何形式的帮助。

【问题讨论】:

  • 为什么要设置self.accelerometer.delegate = nil;当您切换到其他视图时?可能是它引起了问题。
  • 如果我不设置它,它会给我一个错误,因为我正在尝试在当前转换仍在运行时启动转换,因为正在调用“加速计:didAccelerate”函数每次。
  • 感谢您在返回原始视图时再次分配加速度计代表吗?即无论是在 viewDidLoad/viewWillAppear/viewDidAppear 中,你都可以像这样放置 self.accelerometer.delegate = self 。我想这应该适合你。

标签: iphone objective-c xcode uiview accelerometer


【解决方案1】:

您可以设置一个 BOOL 以在您展示新视图控制器时暂时禁用加速度计处理,并避免调用 self.accelerometer.delegate = nil

模态转换完成后,您可以重新启用加速度计处理

编辑 - 示例:

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {     

if(accelerometerEnabled) {

     //... the accelerometer data handling goes here
}

此外,我最初似乎没有理解所有问题 - 您还需要将加速度计 delagate 重置为您想要用于处理加速度数据的任何视图控制器。那个(第二个)视图控制器也必须有 -(void)accelerometer 委托方法。

或者,您可以在根视图控制器中处理加速度数据,并使您的视图成为该根视图的子视图。这样会更简洁,因为您永远不必更改处理加速度的控制器。

【讨论】:

  • 你能给我举个例子吗?我不太确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多