如何在块上使用performSelector

时间:2013-04-14 02:44:19

标签: ios block performselector

以下是代码:

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调用块

上的函数

1 个答案:

答案 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