使用核心动画调整和移动UIView(CAKeyFrameAnimation)

时间:2009-12-11 10:24:10

标签: iphone objective-c animation uiview core-animation

这可能吗?我可以更改图层的不透明度和位置(中心),但每当我尝试更改大小或原点时,它都不起作用。

    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];

1 个答案:

答案 0 :(得分:10)

您既可以更改动画中视图或图层的大小和位置,也可以将其作为动画组进行更改,而不是通过从一系列矩形创建路径。

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

要一次动画两个属性,我将两个动画包装在CAAnimationGroup中,并将其应用于视图的图层。