iPhone viewForZoomingInScrollView изменяет поведение в iOS3.2 + - PullRequest
0 голосов
/ 04 июля 2010

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

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    NSLog(@"view for zooming in scroll view...");

    double scale = mapScrollViewSize.width/scaledSize.width;
    NSArray *pins = [mapView subviews];
    for (int i=0; i<[mapPins count]; i++) 
    {
        AMapPin *mapPin = (AMapPin *)[mapPins objectAtIndex:i];
        if([mapPin isKindOfClass:[AMapPin class]])
        {
            CGAffineTransform transform1 = CGAffineTransformMakeScale(scale, scale);
            mapPin.transform = transform1;
        }
    }
    return mapView;
} 

это прекрасно работает на версиях ОС вплоть до 3.1.3, когда я прокручиваю, я вижу NSLog вконсоль многократно, и мои подпредставления корректно изменяют размеры (во время масштабирования) .. в iOS4 и даже в эмуляторе для SDK 4 и на iPhone 4 селектор вызывается только один раз, а не повторно в более ранних версиях ОС, поэтому изменение размераПодвидов не имеет никакого эффекта.

Я предполагаю, что дизайн изменился, но я хочу знать, что мой лучший вариант для а) изменения моего кода, чтобы он работал, используя viewForZoomingInScrollView, сохраняя изменения до минимумаб) как использовать новый селектор 3.2 с именем scrollViewDidZoom, который работаетНО, поддерживая более ранние версии ОС И с минимальным количеством дополнительного кода, я не эксперт по совместимости между версиями и тому, как наиболее эффективно ее достичь

Спасибо

1 Ответ

1 голос
/ 04 июля 2010

Будет ли это совместимо?

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    [self scrollViewDidZoom:scrollView];
    return mapView;
} 

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    NSLog(@"view for zooming in scroll view...");

    double scale = mapScrollViewSize.width/scaledSize.width;
    NSArray *pins = [mapView subviews];
    for (int i=0; i<[mapPins count]; i++) 
    {
        AMapPin *mapPin = (AMapPin *)[mapPins objectAtIndex:i];
        if([mapPin isKindOfClass:[AMapPin class]])
        {
            CGAffineTransform transform1 = CGAffineTransformMakeScale(scale, scale);
            mapPin.transform = transform1;
        }
    }
}
...