2011-04-18 25 views
0

我需要某個問題的幫助,而不確定如何解決該問題。基本上我有一個視圖,通過使用加速度計切換到另一個視圖,問題是它只能使用一次。當我回到第一個視圖時,加速計將不會再工作,直到我重建項目。在切換視圖時使UIAccelerometer工作多次

這是我使用的方法:

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

你爲什麼設置self.accelerometer.delegate = nil;當你切換到其他視圖?可能是它造成了問題。 – 2011-04-18 14:17:14

+0

如果我沒有設置它,它會給我一個錯誤,因爲我試圖在當前轉換仍在運行時啓動轉換,因爲每次都會調用「accelerometer:didAccelerate」函數。 – 2011-04-18 14:29:49

+0

感謝您回到原始視圖,您是否再次分配加速度計委託?即無論在viewDidLoad/viewWillAppear/viewDidAppear任何適合,你可以把self.accelerometer.delegate =自我那樣。我想這應該適合你。 – 2011-04-19 04:17:53

回答

0

你可以建立一個BOOL當你提出新的視圖控制器臨時禁用加速處理和避免調用self.accelerometer.delegate =零

一旦模式過渡完成後,你可以重新啓用加速處理

編輯 - 例子:

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

if(accelerometerEnabled) { 

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

此外,它看起來像我不明白所有的問題最初 - 你還需要重置加速度計delagateŧ o您希望用來處理加速度數據的任何視圖控制器。該(第二)視圖控制器將不得不具有 - (void)加速度計委託方法。

或者,您可以在根視圖控制器中處理加速度數據,並使該視圖的視圖子視圖。這將更清潔,因爲您永遠不必更改哪個控制器處理加速。

+0

你能告訴我一個關於如何做到這一點的例子嗎?我不太確定。 – 2011-04-19 01:41:19