- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 MKMapView,其中有很多从解析器 xml 定义的注释引脚;那是我的代码:
-(IBAction)LoadAnnotation:(id)sender {
RXML element ...
RXML iterate....
[myMap removeAnnotations:myMap.annotations];
annotation.title = // NSString from RXML parser
annotation.subtitle = // NSString from RXML parser
myValue = // float value from RXML parser
[mymap addAnnotation:annotation];
}
然后
- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>) annotation2 {
MKPinAnnotationView *pinView=[[MKPinAnnotationView alloc] initWithAnnotation:annotation2 reuseIdentifier:@"MyPin"];
if ( myValue > 0 && myValue < 10) {
pinView.canShowCallout = YES;
pinView.pinColor = MKPinAnnotationColorRed;
pinView.animatesDrop=YES;
return pinView;
}
else if ( myValue > 10 && myValue < 20 ) {
pinView.canShowCallout = YES;
pinView.pinColor = MKPinAnnotationColorGreen;
pinView.animatesDrop=YES;
return pinView;
}
pinView.canShowCallout = YES;
pinView.pinColor = MKPinAnnotationColorPurple;
pinView.animatesDrop=YES;
return pinView;
}
好的,当我的 MKMapView 加载后,我可以看到标题注释、副标题注释和所有不同颜色的图钉。
但是,如果我在某个级别滚动并放大 map ,然后再次缩小,所有图钉都会变成紫色。那里发生了什么?
我也尝试过在这两种方法中使用相同的“注释”(id)(而不是“注释”和“annotation2”),但我没有结果。
有没有办法避免这种情况并在 map 滚动和缩放后保留 pinColors?
最佳答案
viewForAnnotation
委托(delegate)方法不一定只为每个注释调用一次,也不能保证按添加注释的顺序调用。如果您将 showsUserLocation
设置为 YES
,它也会调用用户位置(蓝点)。
当您缩放或平移 map 时, map View 将在注释返回 View 时(再次)调用委托(delegate)方法。届时,您的 myValue
将与 map 请求查看的注释无关。
不使用类级别的 ivar,添加 myValue
作为注释类的属性,并将其与 title
和subtitle
在调用 addAnnotation
之前:
annotation.title = // NSString from RXML parser
annotation.subtitle = // NSString from RXML parser
annotation.myValue = // float value from RXML parser
^^^^^^^^^^^
然后在 viewForAnnotation
中,使用 annotation
参数中的 myValue
属性而不是 ivar。这样,委托(delegate)方法总是使用特定于它请求 View 的注释的信息:
if ( ! [annotation isKindOfClass:[MyCustomAnnotationClass class]])
{
return nil; //return a default view if not your custom class
}
//cast annotation to custom class so we can get the custom property...
MyCustomAnnotationClass *myPin = (MyCustomAnnotationClass *)annotation;
//use the custom property in the annotation instead of ivar...
if (myPin.myValue > 0 && myPin.myValue < 10) {
....
不必将 annotation
参数的名称更改为 annotation2
。
不相关,但您应该通过使用 dequeueReusableAnnotationViewWithIdentifier
实现注释 View 重用(在 SDK 或 SO 上搜索)。如果有很多注释,它可以帮助提高性能。
MyAnnotation
类应该如下所示:
@interface MyAnnotation : NSObject <MKAnnotation> {
float myValue;
}
@property (nonatomic, assign) CLLocationCoordinate2D coordinate; //<-- add
@property (nonatomic, copy) NSString *title; //<-- add
@property (nonatomic, copy) NSString *subtitle; //<-- add
@property (nonatomic, assign) float myValue;
@end
@implementation MyAnnotation
@synthesize coordinate; //<-- add
@synthesize title; //<-- add
@synthesize subtitle; //<-- add
@synthesize myValue;
@end
添加注解的地方应该是这样的:
MyAnnotation *annotation = [[MyAnnotation alloc] init];
annotation.title = someTitle; // NSString from RXML parser
annotation.subtitle = someSubTitle; // NSString from RXML parser
annotation.myValue = someValue; // someValue from RXML parser
[mapView addAnnotation:annotation];
上面,someValue
是原始 ViewController
中的 myValue
。
此外,在 viewForAnnotation
中,将 annotation2
改回 annotation
并且不要忘记将 MKPinAnnotationView *pinView =[[ MKPinAnnotationView alloc] init...
在 MyAnnotation *myPin = ...
行之前。
关于ios - MKMapView 放大后 MKPinAnnotationView 失去 pinColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12804781/
我正在开发一个 OSX 应用程序。 我对 MKAnnotation 进行了子类化: import Foundation import MapKit class LocationAnnotation:
我想设置自定义图像而不是 map 上的普通图钉。我还希望它能够打开并为每个添加放置动画。 有什么建议吗? 编辑:这是我所拥有的一切 - (MKAnnotationView *)mapView:(MKM
根据 Apple 文档,MKPinAnnotationView 的图钉颜色有红色、绿色和紫色。还有什么办法可以得到其他颜色吗?我在文档中没有找到任何内容。 最佳答案 更多;) 还有原来的: 代码: -
我不明白为什么(理论上)与 MKPointAnnotation 关联的 MKPinAnnotationView 没有出现在 map 上。事实上,图钉出现了,但它不是应有的紫色... 这是代码: MKP
我正在使用 iOS Mapkit 来放置代表包的图钉。初始负载时一切正常。 我需要做的是,当用户位置在最近包裹的100m半径内时,我需要将引脚更改为“解锁”状态(目前可能只是更改颜色)。我已经检测到最
我有以下代码可以在我的 map 中删除并添加新图钉: - (IBAction)setLocation:(id)sender{ NSMutableArray *toRemove = [NSMut
我过去有过使用 MKMapView 和 MKPointAnnotation 的经验,我用它们在 map 上放置了一些图钉。这次我尝试更进一步,使用 MKPinAnnotationView 来编写标签和
编辑:将标题从:“Double tap ..”更改为“Double selection touch..” 我需要在我的应用程序中至少检测到对 MKPinAnnotationView 的第二次触摸。目前
我必须为不同的引脚设置自定义图像。使用我的代码,我可以为它们中的每一个设置自定义颜色,但是当我尝试设置自定义图像而不是颜色时,它不起作用。 - (MKAnnotationView *)mapView:
我想要一个 MKMapView 显示带有公开按钮的注释,这会导致像 the Golden Gate Bridge annotation in this Apple sample app 这样的 Vie
为 MKPinAnnotationView 上传自定义图像后,我注意到图钉偏离了中心。引脚应该位于路线折线上的一个点上,并且位于 mkcircle 的中心;但是,图钉似乎位于多段线的右侧和中心偏北的位
有谁知道为什么用于 MKPinAnnotationView 的图像应该稍微偏移(向上和向右),我使用的代码是: pinView = [[MKPinAnnotationView alloc] initW
MKPinAnnotationView pin 的宽度和高度是多少像素? 编辑:更具体地说,是 iPhone 屏幕上包含图钉的假想矩形的宽度和高度。 最佳答案 根据下面的代码,图钉图像和 MKPinA
我继承了一个引发此警告的项目 Incompatible pointer types assigning to 'MKPinAnnotationView *' from 'MKAnnotationVie
我正在尝试在 MKPinAnnotationView 后面添加图像。看起来在这里执行此操作应该相当容易: - (void)mapView:(MKMapView *)mapView didAddAnno
我添加了 MKPinAnnotationView 和 setDragAble。我的代码在这里 - (MKAnnotationView *)mapView:(MKMapView *)mapView vi
我正在使用 MKPinAnnotationView在我的应用程序中。 我正在设置 MapView对象作为委托(delegate),并使用此代码自定义我的 AnnotationView func
我遇到了一个奇怪的问题,即初始的一组图钉未显示自定义图像。 在我的 - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotati
我正在尝试根据某些条件为 MKPinAnnotationView 创建三个自定义图钉图像注释。在这种情况下,我将遍历自行车站对象的 for 循环,检查可用自行车的数量是否为 0,如果是,则设置一个 p
我过去有一些使用 MKMapView 和 MKPointAnnotation 的经验,我曾用它们在 map 上放置一些图钉。这次我想更进一步,使用 MKPinAnnotationView 来写一个标签
我是一名优秀的程序员,十分优秀!