2010-07-03 7 views
0

J'ai une vue de défilement qui représente une carte, il a des broches, quand l'utilisateur zoome la carte, mon application utilise viewForZoomingInScrollView pour s'assurer que toutes les broches restent de la même taille (I assurer l'emplacement du point de broche est maintenue en plaçant le point d'ancrage sur la couche) ici est le sens général du code ..iPhone viewForZoomingInScrollView changements de comportement dans iOS3.2 +

- (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; 
} 

cela fonctionne très bien sur les versions OS jusqu'à 3.1.3 quand je défiler je peux voir le NSLog dans la console à plusieurs reprises et mes sous-vues se redimensionner correctement (PENDANT le zoom) .. dans iOS4 et en effet dans l'émulateur pour SDK 4 et sur l'iPhone 4, le sélecteur ne semble être appelé qu'une seule fois versions antérieures du système d'exploitation, le redimensionnement des sous-vues n'a aucun effet.

Je suppose que la conception a changé, mais je veux savoir ce que ma meilleure option est soit pour a) changer mon code pour qu'il fonctionne à l'aide viewForZoomingInScrollView en gardant des changements au strict minimum b) comment utiliser du nouveau 3.2 sélecteur appelé scrollViewDidZoom qui ne fonctionne pas mais le maintien du soutien pour les versions antérieures et avec la quantité minimum de code supplémentaire, im pas un expert sur la compatibilité de la version croix et comment atteindre le plus efficacement, il

Merci

Répondre

1

serait-ce compatible?

- (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; 
     } 
    } 
} 
+0

merci, je l'ai fait faire cela, mais était pas sûr qu'il était la « meilleure » façon de le faire, la documentation est assez faible sur le nouveau scrollViewDidZoom afin que cela fonctionne (testé sur les appareils et émulateurs) bâton malade avec jusqu'à ce que quelqu'un dise le contraire, bravo! – Matt