【发布时间】:2011-04-06 15:55:38
【问题描述】:
大家好,抱歉,如果我是这方面的新手,我已经环顾四周,但还没有完全弄清楚如何去做。基本上我想使用 iphone 的加速度计切换视图。例如,假设 iphone 掉了,这个动作会触发它切换到另一个视图,告诉用户手机掉了。任何有关如何做到这一点的帮助将不胜感激,谢谢。
【问题讨论】:
标签: iphone objective-c xcode uiview accelerometer
大家好,抱歉,如果我是这方面的新手,我已经环顾四周,但还没有完全弄清楚如何去做。基本上我想使用 iphone 的加速度计切换视图。例如,假设 iphone 掉了,这个动作会触发它切换到另一个视图,告诉用户手机掉了。任何有关如何做到这一点的帮助将不胜感激,谢谢。
【问题讨论】:
标签: iphone objective-c xcode uiview accelerometer
可以使用 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
}
}
您可以选择 THRESHOLD 为您想要的任何值。这意味着加速度矢量的长度超过了某个值。我认为如果没有运动,这个值通常在 1 左右,如果有运动,则更高。我建议将其设置为 1.5 之类的东西?您可以自己尝试不同的值。
希望这会有所帮助!
【讨论】:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to begin a modal transition from <FirstViewController: 0x5c42bb0> to <SecondViewController: 0x593d290> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed 再次感谢,
SecondViewController *screen = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; screen.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentModalViewController:screen animated:YES]; [screen release];
self.accelerometer.delegate = nil; 这将防止将来调用该函数。希望这会有所帮助!