如何使用陀螺仪在屏幕上移动NSObject

时间:2013-10-03 13:56:37

标签: ios accelerometer move nsobject gyroscope

我有一个NSObject球,我想向你倾斜iPhone的方向移动。我从来没有做任何倾斜之前,只触摸。我也希望它以更陡的角度倾斜时移动得更快。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

这是我使用的代码,虽然结果很差:你可能想测试它并检查可能会改进的地方:

NSDate * lastDate=nil;

-(void)didRotate:(CMRotationRate)rotationRate{
NSDate *newDate=[NSDate date];
CGPoint testCenter=[[[OverlayViewController sharedOverlay] testElement] center];
if (lastDate!=nil){
    NSLog(@"rotate x %f y %f, z %f", rotationRate.x, rotationRate.y, rotationRate.z);
    NSTimeInterval interval=[newDate timeIntervalSinceDate:lastDate];
    CGRect topFrame=[[[OverlayViewController sharedOverlay] view] frame];
    float xAtan=atan(rotationRate.x);
    float yAtan=atan(rotationRate.y);

    float xRotation= topFrame.size.width*xAtan/interval;
    float yRotation=topFrame.size.height*yAtan/interval;
    NSLog(@"topHeight=%f yAtan=%f interval=%f yRotation=%f", topFrame.size.height, yAtan, interval, yRotation);
    NSLog(@"interval %f rotation (%f,%f)", interval, xRotation, yRotation);
    CGPoint newCenter=CGPointMake(testCenter.x+xRotation, testCenter.y+yRotation);
    NSLog(@"old center (%f,%f) new center (%f,%f)", testCenter.x, testCenter.y, newCenter.x, newCenter.y);
    [[[OverlayViewController sharedOverlay] testElement] setCenter:newCenter];
}
lastDate=newDate;
}