Как изменить размер MKAnnotationView на iOS6?

Изменить размер изображения MKAnnotationView при увеличении и уменьшении масштаба карты? Этот метод успешен на iOS5, но не работает на iOS6.

Я напрямую меняю преобразование MKAnnotationView, и мне не повезло. Размер MKAnnotationView изменяется только мгновенно (при редактировании внутри MKMapView после завершения редактирования MKAnnotationView восстановит исходный размер).

Мой код ниже:

- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated {
for (id <MKAnnotation>annotation in _mapView.annotations) {
    // if it's the user location, just return nil.
    if ([annotation isKindOfClass:[MKUserLocation class]])
        continue;

    // handle our custom annotations
    //
    if ([annotation isKindOfClass:[XPMKAnnotation class]])
    {
        // try to retrieve an existing pin view first
        MKAnnotationView *pinView = [_mapView viewForAnnotation:annotation];
        //resize the pin view
        double zoomLevel = [_mapView getZoomLevel];
        double scale = (1.0 * zoomLevel / 16) + 0.5;
        pinView.transform = CGAffineTransformMakeScale(scale, scale);
    }
    }
}

Можем ли мы изменить размер MKAnnotationView на iOS6? Кто-нибудь знает способ?


person user501836    schedule 28.09.2012    source источник
comment
Здесь такая же проблема. Мой выглядит так, как будто он мерцает, как будто преобразование продолжает сбрасываться для AnnotationView. Напишу здесь, если найду решение.   -  person Bach    schedule 01.10.2012


Ответы (1)


Apple предлагает изменить размер свойства .image представления аннотации. В моем случае, показанном ниже, я посмотрел на UIImage, который был установлен в представлении для аннотации, и повторно масштабировал его до уровня масштабирования в UIPinchGestureRecognizer.

   UIImage *orangeImage = [UIImage imageNamed:@"Orange210.PNG"];
    CGRect resizeRect;
    //rescale image based on zoom level
    resizeRect.size.height = orangeImage.size.height * scale;
    resizeRect.size.width = orangeImage.size.width  * scale ;
    NSLog(@"height =  %f, width = %f, zoomLevel = %f", resizeRect.size.height, resizeRect.size.width,zoomLevel );
    resizeRect.origin = (CGPoint){0,0};
    UIGraphicsBeginImageContext(resizeRect.size);
    [orangeImage drawInRect:resizeRect];
    UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    pinView.image = resizedImage;
person Erik Gross    schedule 24.10.2012
comment
Спасибо, Эрик Гросс, очень помог мне. - person user501836; 24.10.2012
comment
К вашему сведению, getZoom относится к категории, обсуждаемой здесь: stackoverflow.com/questions/7657207/ - person eulr; 17.11.2013
comment
при чем тут масштаб - person Vishnu; 16.04.2014
comment
Вишну и @Квинси. Вы можете найти определение шкалы из вопроса, указанного в первой строке этого вопроса. Посмотреть ответ - person Awais Fayyaz; 18.10.2018
comment
Я реализовал то же самое, но размер моего изображения не изменяется. - person Awais Fayyaz; 18.10.2018