2013-04-25 17 views
100

Eksperymentuję z najnowszą wersją Google Maps for iOS SDK 1.2.1.2944, aby animować GMSGroundOverlay. Użytkownik ma kontrolę nad sekwencją obrazów, więc używanie animowanej UIImage nie jest możliwe ze smutkiem, więc ładuję się w locie na UIImage. Numer GMSGroundOverlay.icon jest ustawiony na UIImage, który jest aktualizowany.Animacja GMSGroundOverlay - czy powinienem używać opcji CATiledLayer?

Oprócz użycia dużej pamięci, wydaje mi się, że uderzył ograniczenie, że gdy próbuję nakładki UIImage korzystając GMSGroundOverlay.icon To więcej niż 1000px x 1000px, to wywala. Odniesienie do UIImage z 1000px x 1000px omija awarię.

Wydaje mi się jednak, że może powinienem wykorzystać CATiledLayer do przenoszenia obrazu tylko załadować do pamięci, a następnie na własność ikona GMSGroundOverlay, ale czy ktoś miał doświadczenia z użyciem CATiledLayer z Map Google dla iOS SDK i obrazów sekwencjonowania jako animowany GMSGroundOverlay?

+0

Mam właśnie ten sam problem, chociaż próg, który widzę w przypadku awarii, jest jeszcze niższy. Chciałbym zobaczyć rozwiązanie tego problemu. –

+0

Chciałbym rozwiązanie dla wszystkich rodzajów GMSOverlays –

+0

Nie widzę, jak chcesz użyć TiledLayer .. nakładka używa UIImage ... –

Odpowiedz

1

Otrzymałem tę odpowiedź od pressanswer.com, myślę, że to może ci pomóc.

W tej chwili nie mogę użyć klawisza "pozycja" do animacji, w końcu animowałem go używając osobnych "szerokości geograficznej" i "długości geograficznej".

Najpierw oblicz punkty i dodaj je do 2 oddzielnych tablic, jedna do szerokości geograficznej (y) i jedna do długości geograficznej (x), a następnie użyj właściwości wartości w animacji CAKeyFrameAnimation. Utwórz 2 obiekty CAKeyFrameAnimation (1 dla każdej osi) i zgrupuj je przy użyciu grupy CAAnimationGroup i animuj je razem, tworząc krąg.

W moim równaniu zmieniam długość promienia na każdej osi, tak że mogę również wygenerować owalną ścieżkę.

NSMutableArray *latitudes = [NSMutableArray arrayWithCapacity:21]; 
    NSMutableArray *longitudes = [NSMutableArray arrayWithCapacity:21]; 
    for (int i = 0; i <= 20; i++) { 
     CGFloat radians = (float)i * ((2.0f * M_PI)/20.0f); 

     // Calculate the x,y coordinate using the angle 
     CGFloat x = hDist * cosf(radians); 
     CGFloat y = vDist * sinf(radians); 

     // Calculate the real lat and lon using the 
     // current lat and lon as center points. 
     y = marker.position.latitude + y; 
     x = marker.position.longitude + x; 


     [longitudes addObject:[NSNumber numberWithFloat:x]]; 
     [latitudes addObject:[NSNumber numberWithFloat:y]]; 
    } 

    CAKeyframeAnimation *horizontalAnimation = [CAKeyframeAnimation animationWithKeyPath:@"longitude"]; 
    horizontalAnimation.values = longitudes; 
    horizontalAnimation.duration = duration; 

    CAKeyframeAnimation *verticleAnimation = [CAKeyframeAnimation animationWithKeyPath:@"latitude"]; 
    verticleAnimation.values = latitudes; 
    verticleAnimation.duration = duration; 

    CAAnimationGroup *group = [[CAAnimationGroup alloc] init]; 
    group.animations = @[horizontalAnimation, verticleAnimation]; 
    group.duration = duration; 
    group.repeatCount = HUGE_VALF; 
    [marker.layer addAnimation:group forKey:[NSString stringWithFormat:@"circular-%@",marker.description]]; 
+0

To nie jest GMSGroundOverlay. Wyświetlasz GMSMarker. Nakładka nie zapewnia takiego samego dostępu do "warstwy" –

Powiązane problemy