2009-12-11 8 views
6

Ist das möglich? Ich kann die Deckkraft und Position (Mitte) der Ebene ändern, aber wenn ich versuche, die Größe oder den Ursprung zu ändern, funktioniert es nicht.Größenänderung und Verschieben einer UIView mit Kernanimation (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]; 

Antwort

10

Sie können beide ändern Sie die Größe und die Position einer Ansicht oder Schicht in einer Animation, aber Sie werden so als Animation Gruppe tun wollen, nicht durch einen Pfad aus einer Reihe von Rechtecken.

Ich gebe ein Beispiel für eine gruppierte Animation, die eine Ansicht entlang eines Pfades bewegt, während sie schrumpfen und ihre Deckkraft in meiner Antwort here verringern. Dazu wird ein CAKeyframeAnimation für den gekrümmten Pfad verwendet, dem die Ansicht folgt (nur die Position wird animiert). Anschließend wird eine Grundanimation verwendet, um die Größe der Begrenzungen der Ansicht anzupassen. Sie können dort auch eine CAKeyframeAnimation mit mehreren CGSizes für jeden gewünschten Größen-Keyframe verwenden und sicherstellen, dass sie in einen NSValue eingebunden werden, bevor Sie sie in ein NSArray von Keyframes einfügen.

Um zwei Eigenschaften gleichzeitig zu animieren, verpacke ich die beiden Animationen in eine CAAnimationGroup und trage sie auf die Ebene der Ansicht ein.

+0

Ehrfürchtig, das ist genau das, was ich gesucht habe. Vielen Dank! – ACBurk

Verwandte Themen