核心动作用加速度计移动两件事

时间:2011-08-04 05:58:37

标签: iphone xcode accelerometer core-motion

我正试图在xcode中使用加速度计移动两个按钮。我有第一个按钮工作,当我调用startDrifting时,但是当我调用startDrifting2作为第二个按钮时,第二个按钮没有发生任何事情。我尝试为startDrifting2调用startAccelerometerUpdatesToQueue,但第一个停止工作。任何想法?

-(void) startDrifting:(UIButton *) button 
{
    [self.motionManager startAccelerometerUpdatesToQueue:[[[NSOperationQueue alloc] init] autorelease] withHandler:^(CMAccelerometerData *data, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        CGRect labelFrame = button.frame;
        labelFrame.origin.x += data.acceleration.x * MOTION_SCALE;
        if (!CGRectContainsRect(self.view.bounds, labelFrame)) 
            labelFrame.origin.x = button.frame.origin.x;
        labelFrame.origin.y -= data.acceleration.y * MOTION_SCALE;
        if (!CGRectContainsRect(self.view.bounds, labelFrame)) 
            labelFrame.origin.y = button.frame.origin.y;
        button.frame = labelFrame;
    } );

}];
}

-(void) startDrifting2:(UIButton *) button 
{
CMAccelerometerData *data = [self.motionManager accelerometerData];  

dispatch_async(dispatch_get_main_queue(), ^{
    CGRect labelFrame = button.frame;
    labelFrame.origin.x += data.acceleration.x * MOTION_SCALE * 1;
    if (!CGRectContainsRect(self.view.bounds, labelFrame)) 
        labelFrame.origin.x = button.frame.origin.x;
    labelFrame.origin.y += data.acceleration.y * MOTION_SCALE * 1;
    if (!CGRectContainsRect(self.view.bounds, labelFrame)) 
        labelFrame.origin.y = button.frame.origin.y;
    button.frame = labelFrame;
});  
}

1 个答案:

答案 0 :(得分:0)

尝试将委托设置为自己,然后将其返回给应用程序的主委托。当您点击下一个按钮时,尝试用另一种方法重新分配代理。