我在mapView中有一些关于注释的问题。让我们一瞥我的要求。
我想选择用户选择会面地点。
有两种选择。
1)我应该提供近数据列表
或者
2)他可以将针拖放到他想要的任何地方!
为此我创建了一个片段。 近数据的第一个索引 和 丢弃引脚的第二个索引。
对于第一个选项(“靠近”),我需要靠近卖方所在地,买方所在地和卖方与买方之间的中点的数据。所以我打电话给google api并通过经纬度三次获取数据。第一次获取数据时没有问题。我的数组填满了所有数据(包括3个响应),并且引脚颜色也根据要求而变化。
买家(红色) 卖家(紫色) 中点(绿色)
现在,当我点击放置引脚时,所有数据都将从阵列中删除,并且一个引脚将被放置在地图上。
直到现在它运作正常!
但是当你再次点击“附近”时,问题就开始了!毫无疑问,它可以提供我想要的数据,但不会保持引脚颜色。
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
if ([segmentND selectedSegmentIndex]==0) {
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString* BridgeAnnotationIdentifier = @"bridgeAnnotationIdentifier";
MKPinAnnotationView* pinView = (MKPinAnnotationView *)
[myMapView dequeueReusableAnnotationViewWithIdentifier:BridgeAnnotationIdentifier];
if (!pinView)
{
MKPinAnnotationView* customPinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:BridgeAnnotationIdentifier] autorelease];
switch (self.pinColor) {
case 0:
{
customPinView.pinColor = MKPinAnnotationColorPurple;
}
break;
case 1:
{
customPinView.pinColor = MKPinAnnotationColorRed;
}
break;
case 2:
{
customPinView.pinColor = MKPinAnnotationColorGreen;
}
break;
default:
break;
}
customPinView.canShowCallout = YES;
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
customPinView.rightCalloutAccessoryView = rightButton;
return customPinView;
}
else
{
pinView.annotation = annotation;
}
return pinView;
}
else {
// Code of dragging dropping pin. It works Fine.s
}
}
我附上image以获取更多想法。
请给我解决方案或任何其他方式来实现它。 请记住Pin颜色是区分卖方买方和中点的必要条件!
答案 0 :(得分:1)
当前方法的问题在于self.pinColor不会根据地图需要查看的注释而改变。当它感觉像它时,它可以并且将调用viewForAnnotation。也许地图已经滚动,一个引脚刚刚回到视野中。也许该应用程序已被置于后台,并且正被用户带回到视图中。您需要分析注释的原因是传入以确定在视图中使用哪种引脚颜色。您使用什么对象进行注释?如果它是HSAnno并且它有一个名为pinColor的属性,你可以做这样的事情,而不是你的switch语句。
HSAnno* currentAnno = (HSAnno *)annotation;
pinView.pinColor = currentAnno.pinColor;
这样,无论需要重绘什么注释,viewForAnnotation都会返回正确的彩色图钉。
答案 1 :(得分:0)
当没有可重复使用的引脚时,您可以在该代码部分设置pincolor。
if (!pinView)
....
customPinView.pinColor = MKPinAnnotationColorPurple;
....
}
当调用viewForAnnotation
并找到可重复使用的引脚时,会使用它们。有错误的颜色针脚。
在
中设置pincolorelse
{
pinView.annotation = annotation;
}
部分它应该可以正常工作。
答案 2 :(得分:0)
认为它在这里被误认为
else
{
pinView.annotation = annotation;
}
return pinView;
纠正
else
{
pinView.annotation = annotation;
return pinView;
}
答案 3 :(得分:0)
这里我很少修改你的代码&amp; MKMapView
代表。以前,您在pin
内更改if
颜色,使其在第一次MKMapView
加载时仅调用一次。
-(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
static NSString* BridgeAnnotationIdentifier = @"bridgeAnnotationIdentifier";
MKPinAnnotationView* pinView = (MKPinAnnotationView *)
[mapView dequeueReusableAnnotationViewWithIdentifier:BridgeAnnotationIdentifier];
if (!pinView)
{
pinView = [[[MKPinAnnotationView alloc]
initWithAnnotation:annotation reuseIdentifier:BridgeAnnotationIdentifier] autorelease];
}
else
{
pinView.annotation = annotation;
}
switch (self.pinColor) {
case 0:
{
pinView.pinColor = MKPinAnnotationColorPurple;
}
break;
case 1:
{
pinView.pinColor = MKPinAnnotationColorRed;
}
break;
case 2:
{
pinView.pinColor = MKPinAnnotationColorGreen;
}
break;
default:
break;
pinView.canShowCallout = YES;
UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[rightButton addTarget:self
action:@selector(showDetails:)
forControlEvents:UIControlEventTouchUpInside];
pinView.rightCalloutAccessoryView = rightButton;
return pinView;
}
return pinView;
}
P.S。我已删除您的第一个UISegment
条件以便在我身边查看,请在实施时按原样添加。