对于应用我建,我有一个自定义的“老地图”效果PNG,我想覆盖上的MKMapView视图。 不幸的是,这样我试图做到这一点是完全正确的:
- 一个子视图添加到的MKMapView(问题:对于PNG的的UIImageView被放在上面的注释销,它看起来怪异
- 使图像注释视图本身,并将其置于其他的人(问题:上滚动,我要移动注释视图图像,并有一段时间只是常规的地图,而不是带点儿怀旧效果)。
我基本上要做到的是具有上面的maptiles但低于注释视图分层子视图,这将保持稳定,而用户滚动周围,有什么想法?
对于应用我建,我有一个自定义的“老地图”效果PNG,我想覆盖上的MKMapView视图。 不幸的是,这样我试图做到这一点是完全正确的:
我基本上要做到的是具有上面的maptiles但低于注释视图分层子视图,这将保持稳定,而用户滚动周围,有什么想法?
请注意,所有MKMapView
子视图层次结构,注释,行为等,在内部私有收益MKMapViewInternal类,所以任何更改(在某种程度上,我建议或其他)在这个结构可能会导致您的应用程序从苹果商店被拒绝。
我没有一个完整的解决方案,只是一个想法。 我的想法是要覆盖查看有没有相同的上海华注解视图,并确保注释将被放置在我们覆盖。 在MKMapViewDelegate我们执行:
- (void)mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views{
if (views.count > 0){
UIView* tView = [views objectAtIndex:0];
UIView* parView = [tView superview];
UIView* overlay = [tView viewWithTag:2000];
if (overlay == nil){
overlay = [[UIImageView alloc] initWithImage:[UIImage imageNamed:MY_IMAGE_NAME]];
overlay.frame = parView.frame; //frame equals to (0,0,16384,16384)
overlay.tag = 2000;
overlay.alpha = 0.7;
[parView addSubview:overlay];
[overlay release];
}
for (UIView* view in views)
[parView bringSubviewToFront:view];
}
}
此代码你想要什么半 - 你配置的地图瓦片和注释之间的视图。 剩下的任务是根据地图滚动/缩放(如果我找到了办法,我会发布)更改自定义重叠视图帧。
我做了类似的,并在年底以不同的方式事情。 我想通过添加白色覆盖褪色的MapView出来,但我不想淡出注释。 我添加了一个叠加到地图(其实我不得不添加两个,因为它不喜欢我试图添加一个覆盖整个地球)。
CLLocationCoordinate2D pt1, pt2, pt3, pt4;
pt1 = CLLocationCoordinate2DMake(85, 0);
pt2 = CLLocationCoordinate2DMake(85, 180);
pt3 = CLLocationCoordinate2DMake(-85, 180);
pt4 = CLLocationCoordinate2DMake(-85, 0);
CLLocationCoordinate2D coords[] = {pt1, pt2, pt3, pt4};
MKPolygon *p = [MKPolygon polygonWithCoordinates:coords count:4];
[self.mapView addOverlay:p];
pt1 = CLLocationCoordinate2DMake(85, 0);
pt2 = CLLocationCoordinate2DMake(85, -180);
pt3 = CLLocationCoordinate2DMake(-85, -180);
pt4 = CLLocationCoordinate2DMake(-85, 0);
CLLocationCoordinate2D coords2[] = {pt1, pt2, pt3, pt4};
MKPolygon *p2 = [MKPolygon polygonWithCoordinates:coords2 count:4];
[self.mapView addOverlay:p2];
然后,你需要添加地图委托绘制它们:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
if ([overlay isKindOfClass:MKPolygon.class]) {
MKPolygonRenderer *polygonView = [[MKPolygonRenderer alloc] initWithOverlay:overlay];
polygonView.fillColor = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:0.4];
return polygonView;
}
return nil;
}
这是很老,但也许仍然是你们中的一些相关。
我想使地图更暗,而不是注解视图。
我所做的是很简单的,我还不知道,如果它有一些回退...
我把UIView
用黑色透明背景以上MKMapView
,然后加入以下代码:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray<MKAnnotationView *> *)views
{
for (MKAnnotationView *view in views) {
view.center = [self.mapView convertCoordinate:view.annotation.coordinate toPointToView:self.viewDark];
[self.viewDark addSubview:view];
}
}
希望它可以帮助..当然还有 - 如果你发现这个解决方案的任何问题,请让我知道:)
编辑#1:忘了提, self.viewDark
应该有userInteraction
禁用。
编辑#2:另一件事,让我被设置self.viewDark
的autoresizesSubviews
到NO
。