已经过了几天试图弄清楚没有运气,有时它有效,有些则没有,所以我认为我做错了什么,
我想做的是让iPhone充当演示屏幕的激光(使用appleTV)
因此,将设备指向屏幕的某个位置,它实际指向那里。
我正在尝试使用CMAttitude.yaw和Pitch来校准它,因此用户首先定义左上角和右下角,然后获取它们之间的比例值,以获得实际位置,
但是,我总是得到不同的值,我无法计算稳定的比例
我现在正在做的是:
启动动作管理器
mMotionManager = [[CMMotionManager alloc] init];
mMotionManager.deviceMotionUpdateInterval = .02;
//[mMotionManager startDeviceMotionUpdates];
[mMotionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryZVertical];
分两步进行校准
if(mCalibrationStatus == 0){
mMinX = [self getYaw];
mMinY = [self getPitch];
mCalibrationStatus++;
NSLog(@"MinX %f -- MinY: %f", mMinX,mMinY);
} 否则if(mCalibrationStatus == 1){ mMaxX = [self getYaw]; mMaxY = [self getPitch]; mCalibrationStatus ++; NSLog(@“MaxX%f - MaxY:%f”,mMaxX,mMaxY); }
计算职位
float rangeX = mMaxX + mMinX; float sX = [self getYaw] / rangeX;
float rangeY = mMaxY + mMinY;
float sY = [self getPitch]/rangeY;
if(pShouldDebug){
NSLog(@"RangeX [%f, %f, %f] ==> %f",mMinX, [self getYaw], mMaxX, rangeX);
NSLog(@"ScaleX: %f",sX);
NSLog(@"RangeY [%f, %f, %f] ==> %f",mMinY,[self getPitch], mMaxY, rangeY);
NSLog(@"ScaleY: %f",sY);
}
return CGPointMake(sX*mScreenSize.width, mScreenSize.height - sY*mScreenSize.height);
得到偏航和滚动:
-(float) getYaw{
return mMotionManager.deviceMotion.attitude.yaw;
//return mMotionManager.deviceMotion.attitude.quaternion.x;
}
-(float) getPitch{
return mMotionManager.deviceMotion.attitude.pitch;
//return mMotionManager.deviceMotion.attitude.quaternion.y;
}
它有时只能起作用......所以我认为这个想法是正确的,但获得角度的方法并不好..
我非常感谢这里的任何帮助,非常感谢你!