2016-01-24 18 views
1

Я пытаюсь определить, включена ли аннотация карты в MKCircle. Я без устали прошел через Интернет, не повезло найти твердый учебник для Swift 2.0. На все вопросы, посвященные учебному курсу или переполнению стека, отвечает устаревший код или Objective-C. К сожалению, я довольно новичок в Swift, поэтому перевод ответов немного сложно.Использование MKCircle для определения того, является ли CGPathContainsPoint в Swift 2.0

То, что я до сих пор:

До сих пор я объявил круг с MKCircle, который выглядит,

let location = CLLocationCoordinate2D(latitude: 36.9900, 
     longitude: -122.0605) 
let circle = MKCircle(centerCoordinate: location, radius: 100) 

и я в конечном счете хочу использовать CGPathContainsPoint, чтобы обнаружить, если аннотаций находится внутри этого круг. Определение CGPathContainsPoint выглядит,

CGPathContainsPoint(_ path: CGPath?, _ m: UnsafePointer<CGAffineTransform>, _ point: CGPoint, _ eoFill: Bool) -> Bool 

где
путь - путь, чтобы проверить точку против
м - Аффинное преобразования (не уверен, что цель этого, но большинство вопросов поставили эти параметры к нулю)
точка - точка в вопросе
eoFill - использовать четно-нечетное заливку (истина или ложь, опять-таки не уверен, но большинство вопросов установили ложь)

Мой вопрос: Как конвертировать или переводить мой MKCircle так что он ведет себя как CGPath, чтобы передать его в CGPathContainsPoint, а также преобразовать мой CLLocationCoordinate2D в CGPoint?

ответ

2

Зачем использовать сложную оценку пути, чтобы узнать, есть ли точка внутри круга? Некоторые варианты того, что вы описали, могут иметь смысл для тестирования точек против сколь угодно сложных областей, но вы говорите о круге. Определение круга - это множество точек определенного расстояния (радиуса) от выбранной точки (центра). Таким образом:

  1. Создайте CLLocation объекты как для вашего центра круга, так и для вашей точки для тестирования.
  2. Используйте метод distanceFromLocation:, чтобы найти расстояние между ними.
  3. Если расстояние меньше 100 метров (радиус вашего круга), целевая точка находится внутри круга. В противном случае это снаружи.
+0

Ничего себе, это сработало! Спасибо! – Ivan