以下是代码:
if ([motionManager isAccelerometerAvailable] == YES) {
motionManager.deviceMotionUpdateInterval = 1.0 / 100.0;
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[motionManager startAccelerometerUpdatesToQueue:queue withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
[self performSelector:@selector(exchangeCard)
withObject:nil
afterDelay:0];
}];
我发现块上没有调用选择器。所以我的问题是如何使performSelector调用块
上的函数答案 0 :(得分:2)
通常不需要使用startAccelerometerUpdatesToQueue:
,除非你知道你在使用线程做什么,否则你当然不应该使用它。它看起来并不像你那样!使用运动管理器的方法是启动它,然后重复询问它的更新(你可以用重复的NSTimer来设置它)。
self.motman = [CMMotionManager new];
if (!self.motman.accelerometerAvailable) {
NSLog(@"oh well");
return;
}
self.motman.accelerometerUpdateInterval = // whatever
[self.motman startAccelerometerUpdates];
NSTimeInterval t = self.motman.accelerometerUpdateInterval * 10;
self.timer =
[NSTimer
scheduledTimerWithTimeInterval:t
target:self selector:@selector(poll:) userInfo:nil repeats:YES];
所以现在poll:
将被重复调用,你可以做任何你想做的事情:
- (void) poll: (id) dummy {
// ask self.motman for current values here; for example:
CMAccelerometerData* dat = self.motman.accelerometerData;
// now do something with that info
}
有关实际代码以及如何使用动画管理器获取加速度值的完整说明,请参阅我的书:http://www.apeth.com/iOSBook/ch35.html#_raw_acceleration