Xamarin.forms 使指南针始终指向Xamarin形式中的特定位置
我正在尝试实现罗盘跟踪,以到达特定点。为了实现和测试,我添加了SfCircularGauge,它可以很好地使用相同的逻辑。因为,我不想使用XF,所以在没有XF的情况下尝试了它。但是在没有XF的情况下工作时,箭头不会指向正确的方向,并且箭头只指向北方。计算和点是相同的,这都是因为箭头没有指向正确的方向。(我正在iOS中测试,没有在Android中检查) XAML(XF和普通)Xamarin.forms 使指南针始终指向Xamarin形式中的特定位置,xamarin.forms,xamarin.android,xamarin.ios,Xamarin.forms,Xamarin.android,Xamarin.ios,我正在尝试实现罗盘跟踪,以到达特定点。为了实现和测试,我添加了SfCircularGauge,它可以很好地使用相同的逻辑。因为,我不想使用XF,所以在没有XF的情况下尝试了它。但是在没有XF的情况下工作时,箭头不会指向正确的方向,并且箭头只指向北方。计算和点是相同的,这都是因为箭头没有指向正确的方向。(我正在iOS中测试,没有在Android中检查) XAML(XF和普通) 问题是箭头没有指向特定的方向,但它始终位于北方。 该项目也可在 下面我解开了这个谜。更新后的代码如下所示 void C
问题是箭头没有指向特定的方向,但它始终位于北方。
该项目也可在
下面我解开了这个谜。更新后的代码如下所示
void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
try
{
//Qibla lat and long
var qiblaLocation = new Location(QiblaLatitude, QiblaLongitude);
//current position
var position = new Location(current_latitude, current_longitude);
var res = DistanceCalculator.Bearing(position, qiblaLocation);
var TargetHeading = (360 - res) % 360;
var currentHeading = 360 - e.Reading.HeadingMagneticNorth;
Heading = currentHeading - TargetHeading;
Info = string.Format("Lat: {0} Long: {1} degree:{2}", current_latitude, current_longitude, Heading);
}catch(Exception ex){//log exception}
}
完整的项目在下面我解开了这个谜。更新后的代码如下所示
void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
try
{
//Qibla lat and long
var qiblaLocation = new Location(QiblaLatitude, QiblaLongitude);
//current position
var position = new Location(current_latitude, current_longitude);
var res = DistanceCalculator.Bearing(position, qiblaLocation);
var TargetHeading = (360 - res) % 360;
var currentHeading = 360 - e.Reading.HeadingMagneticNorth;
Heading = currentHeading - TargetHeading;
Info = string.Format("Lat: {0} Long: {1} degree:{2}", current_latitude, current_longitude, Heading);
}catch(Exception ex){//log exception}
}
整个项目位于是否正在更新UI线程上的
ImageArrow.Rotation
?如果硬编码旋转值,它是否正确显示?你确定你所有的数学都是正确的吗?这段代码也会改变,但它不会停留在那个点上。设置静态值不会改变。使用上面的代码,它指向了正确的方向,但并没有停留在那里。您将更新ImageArrow的
rotation属性两次—一次是通过调用RotateTo()更新,一次是直接设置。这是有原因的吗?删除该行指向正确的方向并保持不变,但在xf更改移动方向时不会更改。您是否正在更新UI线程上的ImageArrow.Rotation
?如果硬编码旋转值,它是否正确显示?你确定你所有的数学都是正确的吗?这段代码也会改变,但它不会停留在那个点上。设置静态值不会改变。使用上面的代码,它指向了正确的方向,但并没有停留在那里。您将更新ImageArrow的
rotation属性两次—一次是通过调用RotateTo()更新,一次是直接设置。这是有原因的吗?删除该行指向正确的方向并保持不变,但在xf改变移动方向时不会改变。
void Compass_ReadingChanged(object sender, CompassChangedEventArgs e)
{
try
{
//Qibla lat and long
var qiblaLocation = new Location(QiblaLatitude, QiblaLongitude);
//current position
var position = new Location(current_latitude, current_longitude);
var res = DistanceCalculator.Bearing(position, qiblaLocation);
var TargetHeading = (360 - res) % 360;
var currentHeading = 360 - e.Reading.HeadingMagneticNorth;
Heading = currentHeading - TargetHeading;
Info = string.Format("Lat: {0} Long: {1} degree:{2}", current_latitude, current_longitude, Heading);
}catch(Exception ex){//log exception}
}