在切换视图时使UIAccelerometer工作多次

时间:2011-04-18 14:10:29

标签: iphone objective-c xcode uiview accelerometer

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

这是我使用的方法:

- (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;  
}

非常感谢任何形式的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

编辑 - 例如:

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

if(accelerometerEnabled) {

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

此外,看起来我原本不了解所有问题 - 您还需要将加速计delagate重置为您想要用来处理加速度数据的任何视图控制器。那个(第二个)视图控制器也必须有 - (void)加速度计委托方法。

或者,您可以在根视图控制器中处理加速度数据,并创建该根视图的视图子视图。这样会更干净,因为你永远不必改变哪个控制器正在处理加速度。