2009-12-11 14 views
6

Czy to możliwe? Mogę zmienić krycie i położenie (środek) warstwy, ale gdy próbuję zmienić rozmiar lub pochodzenie, to nie działa.Zmiana rozmiaru i przeniesienie UIView z animacją rdzenia (CAKeyFrameAnimation)

CAAnimationGroup* anigroup = [CAAnimationGroup new]; 

    CGMutablePathRef thePath = CGPathCreateMutable(); 
    CGPathAddRect(thePath, NULL, CGRectMake(0,0, 320, 480)); 
    CGPathAddRect(thePath, NULL, CGRectMake(location.x - 16,location.y-24, 32, 48)); 
    CGPathAddRect(thePath, NULL, CGRectMake(190, 20, 32, 48)); 


    CAKeyframeAnimation* AniLoc = [CAKeyframeAnimation animationWithKeyPath:@"frame"]; 
    AniLoc.path = thePath; 
    AniLoc.keyTimes= [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], 
              [NSNumber numberWithFloat:0.3f], 
              [NSNumber numberWithFloat:1.0f],nil]; 
    AniLoc.duration = 5; 

    CFRelease(thePath); 

    anigroup.animations = [NSArray arrayWithObjects:AniLoc,nil]; 
    anigroup.duration = 5; 

    [focusview.layer addAnimation:anigroup forKey:nil]; 

Odpowiedz

10

Można zarówno zmienić rozmiar i położenie widoku lub warstwy w animacji, ale będziemy chcieli zrobić tak jak grupa animatorów, nie tworząc ścieżkę z szeregu prostokątów.

Podam przykład pogrupowanej animacji, która przesuwa widok wzdłuż ścieżki, jednocześnie zmniejszając ją i zmniejszając jej krycie w mojej odpowiedzi here. Działa to za pomocą CAKeyframeAnimation dla zakrzywionej ścieżki, którą podąża widok (tylko animuje swoją pozycję), a następnie za pomocą podstawowej animacji, aby dostosować rozmiar granic widoku. Można również użyć tam CAKeyframeAnimation, z wieloma CGSizes dla każdego klatki kluczowej o rozmiarach, które chciałeś, upewniając się, aby je zawinąć w NSValue przed umieszczeniem ich w NSArray z klatkami kluczowymi.

Aby animować dwie właściwości jednocześnie, zawijam dwie animacje w grupie CAAnimationGroup i stosuję ją w warstwie widoku.

+0

Niesamowite, tego właśnie szukałem. Dzięki! – ACBurk

Powiązane problemy