2009-12-11 136 views
6

这可能吗?我可以改变图层的不透明度和位置(中心),但每当我尝试更改大小或原点时,它都不起作用。使用核心动画调整大小和移动UIView(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]; 

回答

10

你既可以改变动画视图或层的大小和位置,但你要做到这一点作为一个动画组,而不是由一系列矩形的创建路径。

我提供了一个分组动画同时收缩,并在我的答案here降低其不透明度沿着路径移动的视图的一个例子。这是通过使用用于CAKeyframeAnimation该视图如下(仅动画其位置)弯曲路径,并且然后使用一个基本的动画调整视图的边界的大小。您还可以在那里使用CAKeyframeAnimation,并为每个您想要的尺寸关键帧使用多个CGSize,确保在将它们放入NSArray的关键帧之前将它们包装在NSValue中。

要一次动画两个属性,我换了两个动画在CAAnimationGroup并应用到视图的层。

+0

太棒了,这正是我一直在寻找的。谢谢! – ACBurk 2009-12-11 16:33:36