我有一个IOS应用程序,可以显示 map ,并允许用户从列表中选择路线。选择后,应用程序会在 map 上绘制此路线。我正在为路线点使用自定义图像。第一次运行我的应用程序并选择路线时,默认图钉会加载到 map 上。如果刷新 map 或选择其他路线,我的自定义图像会完美显示。这只是在第一次运行时才发生。我使用的是MKAnnotation,而不是MKPinAnnotationView,并且确保没有指定PinView的代码。任何帮助我指出正确方向以找出此处发生的情况的帮助将不胜感激。谢谢!
这些是我的自定义注释类
public 类RouteAnnotation:MKOverlay
{
private CLLocationCoordinate2D _coordinate;
private string _title;
public override CLLocationCoordinate2D Coordinate {
get { return _coordinate; }
set { _coordinate = value; }
}
public override string Title {
get { return _title; }
}
public RouteAnnotation (CLLocationCoordinate2D coord,
string t) : base()
{
_coordinate=coord;
_title=t;
}
}
public 类ClosestStopAnnotation:MKOverlay
{
private CLLocationCoordinate2D _coordinate;
private string _title;
public override CLLocationCoordinate2D Coordinate {
get { return _coordinate; }
set { _coordinate = value; }
}
public override string Title {
get { return _title; }
}
public ClosestStopAnnotation (CLLocationCoordinate2D coord,
string t) : base()
{
_coordinate=coord;
_title=t;
}
}
这是在我的mapview委托类中
public 重写MKAnnotationView GetViewForAnnotation(MKMapView mapView,NSObject注释)
{
MKAnnotationView anView;
if (annotation is MKUserLocation) {
return null;
}
if (annotation is RouteAnnotation) {
anView = (MKAnnotationView)mapView.DequeueReusableAnnotation (ranv);
if (anView == null)
anView = new MKAnnotationView (annotation, ranv);
anView.Image = UIImage.FromFile ("stop20.png");
anView.CanShowCallout = true;
return anView;
}
if (annotation is ClosestStopAnnotation) {
anView = (MKAnnotationView)mapView.DequeueReusableAnnotation (canv);
if (anView == null)
anView = new MKAnnotationView (annotation, canv);
anView.Image = UIImage.FromFile ("closeststop40.png");
anView.CanShowCallout = true;
anView.Selected = true;
return anView;
}
在我的视图控制器中,在名为GetClosestStop的方法中,我在其中遍历所有点并放置注释
(点是RoutePoint对象的列表)
foreach (RoutePoint p in points) {
if (p.Latitude != response.Latitude && p.Longitude != response.Longitude) {
String pName = p.Name;
var stopCoord = new CLLocationCoordinate2D (p.Latitude, p.Longitude);
RouteAnnotation stop = new RouteAnnotation (stopCoord, pName);
stops [i] = stopCoord;
mapView1.AddAnnotation (stop);
anns [i] = stop;
i++;
}
else {
coord = new CLLocationCoordinate2D (response.Latitude, response.Longitude);
close = new ClosestStopAnnotation (coord, title);
mapView1.AddAnnotation (close);
mapView1.SelectAnnotation(close, false);
stops [i] = coord;
i++;
}
}
每当单击刷新按钮或选择其他路线时,都会清除 map 并再次调用GetClosestStop。
最佳答案
经过大量调试并尝试了不同的方法之后,我意识到直到循环注释并添加注释后,才分配mapView委托。这就是为什么默认图钉仅在第一次运行时使用的原因。谢谢您的帮助!
关于ios - 最初显示iOS引脚注释,然后使用自定义图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17531119/