Радар, как приложение LOVOO со слайдером

Я работаю над приложением, которое имеет функциональность RADAR, как приложение LOVOO. У меня нет опыта работы с CoreLocation и другими платформами, основанными на местоположении.

Было бы очень признательно, если бы вы могли предложить мне, как это может быть достигнуто. Какие рамки я должен использовать и как начать вначале.

Хотя такой же вопрос уже существует на SO здесь, мой вопрос такой же, как Радарный вид, похожий на LOVOO, но его бесполезно для меня, поэтому я спрашиваю его снова.

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

- (float)angletoCoordinate:(CLLocationCoordinate2D)second {

//myCurrentLocation is origin

//second is point

float lat1 = DegreesToRadians(myCurrentLocation.coordinate.latitude);
float lon1 = DegreesToRadians(myCurrentLocation.coordinate.longitude);

float lat2 = DegreesToRadians(second.latitude);
float lon2 = DegreesToRadians(second.longitude);

float dLon = lon2 - lon1;

float y = sin(dLon) * cos(lat2);
float x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);
float radiansBearing = atan2(y, x);
if(radiansBearing < 0.0)
{
    radiansBearing += 2*M_PI;
}

return radiansBearing;
}


-(float)calculateXPointWithLoc:(ARGeoLocation *)loc andDelta:(float)delta{
float angle = radiansToDegrees(delta);
float dpx = (([myCurrentLocation distanceFromLocation:loc.geoLocation])/1000);

if(0<=angle<=90)
    return viewRadar.center.x + sin(angle)*dpx ;
else if(90<angle<=180)
    return viewRadar.center.x + cos(angle-90)*dpx  ;
else if(180<angle<=270)
    return viewRadar.center.x - cos(270-angle)*dpx ;
else if(270<angle<360)
    return viewRadar.center.x - sin(360-angle)*dpx ;

return 0;
}

-(float)calculateYPointWithLoc:(ARGeoLocation *)loc andDelta:(float)delta{
float angle = radiansToDegrees(delta);

float dpx = (([myCurrentLocation distanceFromLocation:loc.geoLocation])/1000);



if(0<=angle<=90)
    return viewRadar.center.y - cos(angle)*dpx ;
else if(90<angle<=180)
    return viewRadar.center.y + sin(angle-90)*dpx ;
else if(180<angle<=270)
    return viewRadar.center.y + sin(270-angle)*dpx ;
else if(270<angle<360)
    return viewRadar.center.y - cos(360-angle)*dpx ;

return 0;
}

а затем

    int i = 0;
    for(ARGeoLocation *loc in coordinates){

    deltaAz = [self angletoCoordinate:loc.geoLocation.coordinate];
    x = [self calculateXPointWithLoc:loc andDelta:deltaAz];
    y = [self calculateYPointWithLoc:loc andDelta:deltaAz];

    [[plots objectAtIndex:i] setFrame:CGRectMake(x, y, DIAMETER_PLOT, DIAMETER_PLOT)];
    i++;
    }

Я не уверен, правильны ли x и y или нет, и если они верны, то как я могу изменить это значение с изменением значения ползунка.

Ответ 1

Я думаю, что ключевое слово здесь Geofencing.

Geofencing - это автоматический запуск действия, если ваше устройство входит или покидает определенный регион. Для вашего случая ваше действие - отображать профили тех пользователей, которые входят в область вашего радара.

В принципе вам нужно рассчитать круговую область (с учетом радиуса) и отобразить все остальные точки в вашем регионе.

Я нашел этот учебник, который мог бы научить, как это сделать самостоятельно: http://www.raywenderlich.com/95014/geofencing-ios-swift

Надеюсь, это поможет!