В моем приложении есть карта, которая отображает 2 вида аннотаций: местоположения и группы местоположений.Когда я увеличиваю кластер, кластер расширяется, чтобы показать местоположения, содержащиеся в кластере.Когда эти местоположения добавляются на карту, координаты их родительского кластера сохраняются в объекте аннотации.То, что я хочу сделать, это иметь анимацию, чтобы при добавлении этих местоположений они распространялись из местоположения их родительского кластера.Вот мой код для mapView: didAddAnnotationViews:
- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
MKAnnotationView *aV;
for (aV in views)
{
if (([aV.annotation isKindOfClass:[PostLocationAnnotation class]]) && (((PostLocationAnnotation *)aV.annotation).hasParent))
{
CLLocationCoordinate2D startCoordinate = ((PostLocationAnnotation *)aV.annotation).parentCoordinate;
CGPoint startPoint = [ffMapView convertCoordinate:startCoordinate toPointToView:self.view];
CGRect endFrame = aV.frame;
aV.frame = CGRectMake(startPoint.x, startPoint.y, aV.frame.size.width, aV.frame.size.height);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.00];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[aV setFrame:endFrame];
[UIView commitAnimations];
((PostLocationAnnotation *)aV.annotation).hasParent = NO;
}
}
}
Это, кажется, заставляет точки карты лететь из некоторого места далеко за пределами фокуса вида.С помощью отладки я обнаружил, что существует огромное расхождение между значениями для endFrame.origin и startPoint - для одного конкретного aV endFrame.origin выглядит как (32657,21781) (оба CGFloats), а startPoint выглядит как (159.756256,247.213226) (опять же оба CGFloats).Я предполагаю, что endFrame.origin - правильное значение, поскольку точки заканчиваются там, где я хочу, они просто приходят откуда-то издалека.Я использовал convertCoordinate: toPointToView: метод во многих других частях моего кода, и у меня не было проблем.Я также пытался умножить значения X и Y startPoint на различные значения, но один коэффициент не выполняется для каждого значения startPoint.Есть идеи, что происходит?