Ios 如何在委托函数中处理多个MKOverlays
我想要一个带有两个不同覆盖层的MKMapView 首先,我有一个“地图上的图像覆盖”(TileOverlay), 第二,我想在地图上画一条路线 如果我在两个不同的项目(一个是图像覆盖,另一个是路线覆盖)中做这些事情,一切都会很好 现在,我想知道如果合并项目,viewForOverlay委托函数应该是什么样子 对于我的图像(平铺)覆盖,我当前的外观如下:Ios 如何在委托函数中处理多个MKOverlays,ios,xcode,mkoverlay,Ios,Xcode,Mkoverlay,我想要一个带有两个不同覆盖层的MKMapView 首先,我有一个“地图上的图像覆盖”(TileOverlay), 第二,我想在地图上画一条路线 如果我在两个不同的项目(一个是图像覆盖,另一个是路线覆盖)中做这些事情,一切都会很好 现在,我想知道如果合并项目,viewForOverlay委托函数应该是什么样子 对于我的图像(平铺)覆盖,我当前的外观如下: - (MKOverlayView *) mapView:(MKMapView *)mapView viewForOverlay:(id <
- (MKOverlayView *) mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
} else {
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
TileOverlayView*tileView=[[TileOverlayView alloc]INITWITHOVERLAYVIEW:overlay];
tileView.tileAlpha=1.0;
返回tileView;
}
对于“我的路线覆盖”,它如下所示:
- (MKOverlayView *) mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
} else {
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
MKPolylineView*polylineView=[[MKPolylineView alloc]initWithPolyline:overlay];
polylineView.lineJoin=kCGLineJoinRound;
polylineView.strokeColor=[[UIColor blueColor]colorWithAlphaComponent:0.4];
返回多段线视图;
}
现在,如果我想“合并”这些(到一个项目中),这个方法应该是什么样子
- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
//what comes here?
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖
{
//什么来了?
}
您可以通过首先检查传递到mapView:viewForOverlay:
方法中的覆盖类型来处理这种情况,如下所示:
- (MKOverlayView *) mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
} else {
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖{
如果([overlay iskindof类:[MKPolyline类]]){
MKPolylineView*polylineView=[[MKPolylineView alloc]initWithPolyline:overlay];
polylineView.lineJoin=kCGLineJoinRound;
polylineView.strokeColor=[[UIColor blueColor]colorWithAlphaComponent:0.4];
返回多段线视图;
}否则{
TileOverlayView*tileView=[[TileOverlayView alloc]INITWITHOVERLAYVIEW:overlay];
tileView.tileAlpha=1.0;
返回tileView;
}
您可以通过首先检查传递到mapView:viewForOverlay:
方法中的覆盖类型来处理这种情况,如下所示:
- (MKOverlayView *) mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
- (MKOverlayView*)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay
{
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay {
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.lineJoin = kCGLineJoinRound;
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.4];
return polylineView;
} else {
TileOverlayView *tileView = [[TileOverlayView alloc] initWithOverlay:overlay];
tileView.tileAlpha = 1.0;
return tileView;
}
-(MKOverlayView*)地图视图:(MKMapView*)地图视图覆盖:(id)覆盖{
如果([overlay iskindof类:[MKPolyline类]]){
MKPolylineView*polylineView=[[MKPolylineView alloc]initWithPolyline:overlay];
polylineView.lineJoin=kCGLineJoinRound;
polylineView.strokeColor=[[UIColor blueColor]colorWithAlphaComponent:0.4];
返回多段线视图;
}否则{
TileOverlayView*tileView=[[TileOverlayView alloc]INITWITHOVERLAYVIEW:overlay];
tileView.tileAlpha=1.0;
返回tileView;
}
好的,谢谢,但是我应该返回什么?我不需要返回一个包含两个覆盖的MKOverlayView吗?或者如果它是类MKPolyline,我只需要返回polylineView,如果它是类tileView,我需要返回tileView吗?好的,谢谢,但是我应该返回什么?我不需要返回一个包含两个覆盖的MKOverlayView吗??或者,如果polylineView是类MKPolyline,我就必须返回polylineView,如果它是类tileView,我就必须返回tileView?