Ich füge ein MKCircle
Overlay zu meinem mapview
hinzu und ich möchte wissen, ob ein Punkt (Tap in Bildschirm) innerhalb des Kreises ist. Dies ist mein Code:Ermitteln, ob ein Punkt innerhalb von MKCircle in iPhone Sdk ios 7 ist
- (BOOL)pointInsideOverlay:(CLLocationCoordinate2D)tapPoint overlay:(id<MKOverlay>)overlay {
BOOL isInside = FALSE;
MKPolygonView *polygonView = (MKPolygonView *)[self.mapView viewForOverlay:overlay];
MKMapPoint mapPoint = MKMapPointForCoordinate(tapPoint);
CGPoint polygonViewPoint = [polygonView pointForMapPoint:mapPoint];
BOOL mapCoordinateIsInPolygon = CGPathContainsPoint(polygonView.path, NULL, polygonViewPoint, NO);
if (mapCoordinateIsInPolygon) {
isInside = TRUE;
}
return isInside;
}
viewForOverlay
, pointForMapPoint
& path
sind veraltet. Ist das das Problem?
Vielen Dank.
Für einen Kreis müssen Sie CGPathContainsPoint nicht verwenden (aber für Polygone in iOS 7, siehe http://StackOverflow.com/Questions/19014926/detecting-a-point-in-a-mkpolygon-broke- with-ios7-cgpathcontainspoint). Wie die Antwort sagt, können Sie einfach überprüfen, ob die Entfernung vom Mittelpunkt kleiner oder gleich dem Radius ist. Anstatt jedoch die pythagoräische (flache) Entfernung zu verwenden, können Sie CLLocations distanceFromLocation-Methode oder MapKits MKMetersBetweenMapPoints-Funktion verwenden, die für die gekrümmte Oberfläche der Erde verantwortlich sind. – Anna
Danke. Ich verwende distanceFromLocation, um das zu tun. Vielen Dank :) – aminovic09