0
嘿傢伙,對不起,如果我是這個新手,我環顧四周,但還沒有完全發現如何做到這一點。基本上我想使用iPhone的加速度計切換視圖。例如,假設iPhone墜落,該動作會觸發它切換到另一個視圖,告訴用戶手機已經掉落。任何幫助如何做到這一點將不勝感激,謝謝。使用UIAccelerometer切換視圖
嘿傢伙,對不起,如果我是這個新手,我環顧四周,但還沒有完全發現如何做到這一點。基本上我想使用iPhone的加速度計切換視圖。例如,假設iPhone墜落,該動作會觸發它切換到另一個視圖,告訴用戶手機已經掉落。任何幫助如何做到這一點將不勝感激,謝謝。使用UIAccelerometer切換視圖
可以使用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可能嗎?你可以自己嘗試不同的值。
希望這會有所幫助!
嗨,感謝您的幫助,項目的構建和運行沒有任何問題,但在加速計觸發並即將更改視圖時崩潰。我得到的錯誤消息是: ****由於未捕獲的異常'NSInternalInconsistencyException'而終止應用程序,原因:'嘗試在轉換已經進行時開始從到的模態轉換。等待viewDidAppear/viewDidDisappear知道當前轉換已完成' 再次感謝, –
2011-04-06 20:19:28
我不確定是否我寫的加載新視圖的代碼是正確的,也許這是問題? '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
你的代碼似乎很好。您得到的錯誤是因爲您正嘗試在當前轉換仍在運行時啓動轉換。不要忘記,每次移動你的iPhone時,「加速度計:didAccelerate」函數都會被調用。一種解決方案是在if語句後面執行以下代碼行:'self.accelerometer.delegate = nil;'這會阻止將來調用該函數。希望這可以幫助! – Tovi7 2011-04-06 20:41:29