我试图在我的地图视图上绘制一个 MKPolygon(一个三角形),但它没有显示出来。我还画了一条线,它出现了,所以我不确定为什么三角形没有。以下是相关代码:
CGPoint base = [mapView convertCoordinate:carLocation toPointToView:mapView];
CGPoint pivot = [mapView convertCoordinate:locationToLookup toPointToView:mapView];
MKPolygon *triangle = [self drawTriangle:pivot:base];
[mapView removeOverlays:[mapView overlays]];
[mapView addOverlay:line];
[mapView addOverlay:triangle];
-(MKPolygon *) drawTriangle:(CGPoint) pivot:(CGPoint)base {
if ((abs(pivot.x - base.x) >= 70) || abs(pivot.y - base.y) >= 70 ) {
double triangleHeight = 30;
double triangleWidth = 30;
double triangleSide = sqrt(triangleWidth*triangleWidth/4+triangleHeight*triangleHeight);
double openingAngle = asin( triangleWidth/2.0/triangleSide );
double angle = atan2( pivot.y - base.y, pivot.x - base.x );
CGPoint a;
a.x = (int) (base.x + triangleSide*cos( angle + openingAngle));
a.y = (int) (base.y + triangleSide*sin( angle + openingAngle));
CGPoint b;
b.x = (int) (base.x + triangleSide*cos( angle - openingAngle ));
b.y = (int) (base.y + triangleSide*sin( angle - openingAngle ));
MKMapPoint * mp = malloc(sizeof(MKMapPoint) * 3);
MKMapPoint init;
init.x = base.x;
init.y = base.y;
mp[0] = init;
init.x = a.x;
init.y = a.y;
mp[1] = init;
init.x = b.x;
init.y = b.y;
mp[2] = init;
NSLog(@"base x: %f y: %f a x: %f y: %f b x: %f y :%f", base.x, base.y, a.x, a.y, b.x, b.y);
MKPolygon* triangle = [MKPolygon polygonWithPoints:mp count:3];
NSLog(@"inside");
free(mp);
return triangle;
}
NSLog(@"here");
return nil;
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id )overlay
{
MKOverlayView* overlayView = nil;
if (overlay == line) {
NSLog(@"In line");
MKPolylineView* mkov = [[MKPolylineView alloc] initWithPolyline:overlay];
// [mkov fillColor:[UIColor redColor]];
mkov.fillColor = [UIColor redColor];
mkov.strokeColor = [UIColor redColor];
mkov.lineWidth = 3;
overlayView = mkov;
return overlayView;
} else {
NSLog(@"In here");
MKPolygonView *mkpv = [[MKPolygonView alloc] initWithPolygon:overlay];
mkpv.fillColor = [UIColor blueColor];
mkpv.strokeColor = [UIColor blueColor];
mkpv.lineWidth = 3;
overlayView = mkpv;
return overlayView;
}
}
三角形的点似乎是正确的:(这里的一个测试:base x: 43.000000 y: 25.500000 ax: 50.000000 y: 58.000000 bx: 73.000000 y :38.000000),但是 viewForOverlay 永远不会被调用......