2011-04-06 123 views
0

嘿傢伙,對不起,如果我是這個新手,我環顧四周,但還沒有完全發現如何做到這一點。基本上我想使用iPhone的加速度計切換視圖。例如,假設iPhone墜落,該動作會觸發它切換到另一個視圖,告訴用戶手機已經掉落。任何幫助如何做到這一點將不勝感激,謝謝。使用UIAccelerometer切換視圖

回答

2

可以使用UIAccelerometer類讀取加速計,該類將加速計值調用到其UIAccelerometerDelegate協議委託。這意味着:

.h文件:

@interface TestView: UIViewController <UIAccelerometerDelegate> { 
    UIAccelerometer *accelerometer; 
} 

@property (nonatomic, retain) UIAccelerometer *accelerometer; 

@end 
在M檔

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.accelerometer = [UIAccelerometer sharedAccelerometer]; 
    self.accelerometer.updateInterval = .1; 
    self.accelerometer.delegate = self; 
} 

- (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)>THRESHOLD){ 
    //Load new view here  
    } 
} 

你可以選擇門檻,是你希望它是什麼。這意味着加速度矢量的長度超過了某個值。我認爲如果沒有移動,這個值通常是1左右,如果有一些移動,這個值通常會更高。我會建議設置這樣的1.5可能嗎?你可以自己嘗試不同的值。

希望這會有所幫助!

+0

嗨,感謝您的幫助,項目的構建和運行沒有任何問題,但在加速計觸發並即將更改視圖時崩潰。我得到的錯誤消息是: ****由於未捕獲的異常'NSInternalInconsistencyException'而終止應用程序,原因:'嘗試在轉換已經進行時開始從的模態轉換。等待viewDidAppear/viewDidDisappear知道當前轉換已完成' 再次感謝, – 2011-04-06 20:19:28

+0

我不確定是否我寫的加載新視圖的代碼是正確的,也許這是問題? 'SecondViewController * screen = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; \t \t screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; \t \t [self presentModalViewController:screen animated:YES]; \t \t [screen release];' – 2011-04-06 20:22:55

+0

你的代碼似乎很好。您得到的錯誤是因爲您正嘗試在當前轉換仍在運行時啓動轉換。不要忘記,每次移動你的iPhone時,「加速度計:didAccelerate」函數都會被調用。一種解決方案是在if語句後面執行以下代碼行:'self.accelerometer.delegate = nil;'這會阻止將來調用該函數。希望這可以幫助! – Tovi7 2011-04-06 20:41:29