我正在尝试通过CLLocation的课程方法获取有关用户(N-S-W-O)所采用方向的信息。 我正在使用此代码:
double course;
bool isNord;
course = currentLocation.course;
NSLog(@"Current course: %f", course);
NSInteger courseString = course;
//_labelCompass.text = [NSString stringWithFormat:@"%d", courseString];
if (courseString == -1) {
_labelCompass.text = @"N/A";
}
if (courseString >= 22 && courseString <= 67) {
isNord = false;
_labelCompass.text = @"NE";
}
if (courseString >=67 && courseString <= 112) {
isNord = false;
_labelCompass.text = @"E";
}
if (courseString >= 112 && courseString <= 157) {
isNord = false;
_labelCompass.text = @"SE";
}
if (courseString >= 157 && courseString <= 208) {
isNord = false;
_labelCompass.text = @"S";
}
if (courseString >= 208 && courseString <= 247) {
isNord = false;
_labelCompass.text = @"SW";
}
if (courseString >= 247 && courseString <= 292) {
isNord = false;
_labelCompass.text = @"W";
}
if (courseString >= 292 && courseString <= 337) {
isNord = false;
_labelCompass.text = @"NW";
}
if (isNord == true) {
_labelCompass.text = @"N";
}
我当然把它放进
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
并且课程信息已成功更新。 使用这个算法,我不知道什么时候该课程是北方的,就像我为其他人做的那样,所以我已经建立了这个。 还有比这更好的其他方法吗? 非常感谢。
答案 0 :(得分:2)
为什么你不能确定该课程是北方?只是做:
if (course < 22 || course > 337) {
_labelCompass.text = @"N";
}
BTW - 请使用else if
。它会更有效率:
if (courseString == -1) {
_labelCompass.text = @"N/A";
} else if (courseString >= 22 && courseString <= 67) {
_labelCompass.text = @"NE";
} else if (courseString >=67 && courseString <= 112) {
答案 1 :(得分:2)
错误的是,如果第一个if和第二个<= 67
为>= 67
,如果值为67,则总是第一个if将被触发。
另外,正如rmaddy所述,请使用else if
,它更有效率。
最后使用最佳语法min < myVal && myVal < max
来模拟数学范围min < MyVal < max
。
答案 2 :(得分:0)
CLLocationManager有一个标题选项,标题更新为Delegate。
- (void)locationManager:(CLLocationManager *)manager
didUpdateHeading:(CLHeading *)newHeading
newHeading有一个属性'magneticHeading':
0是北方, 90是东, 180是南, 270是西部