将CALayer更改应用于UIView

时间:2014-07-24 12:58:30

标签: objective-c core-animation calayer uiviewanimation caanimation

我有一个UIView。我将动画应用到了CALayer。

[view.layer addAnimation:groupAnimation forKey:name];

我希望图层的最终状态是动画后UIView的状态。让我们说我旋转了45度并使用该层移动到一个新位置;动画后我的视图是否可能处于该状态?因为现在,在动画之后,它又回到了UIView的原始状态。我希望能得到一些帮助。感谢。

2 个答案:

答案 0 :(得分:0)

要理解的是,图层动画只是动画;它只是一种临时的电影"覆盖屏幕。当动画结束时,"电影"被删除,从而揭示真实情况。你可以将这种情况与电影的最后一帧相匹配。

UIView动画在很大程度上为你做到了这一点。但是层动画完全取决于你。

因此,让我们说你改变位置的动画;做某事以使图层或视图实际上是你动画的地方完全取决于你。

通常情况下,您可以将自己的更改作为一组单独的命令来执行。但要注意不要做任何可能触发隐式图层动画的事情,因为这会与您尝试显式执行的动画冲突。

此处的示例代码(与您的代码无关,但确实显示了一般形式):

CAAnimationGroup* group = // ...
// ... configure the animation ...
[view.layer addAnimation:group forKey:nil];
// now we are ready to set up the view to look like the final "frame" of the animation
[CATransaction setDisableActions:YES]; // do not trigger implicit animation by mistake
view.layer.position = finalPosition; // assume we have worked this out

答案 1 :(得分:-1)

在设置CALayer动画或使用CAAnimationGroup时,必须设置以下属性,例如:

groupAnimation.removedOnCompletion = NO;
groupAnimation.fillMode = kCAFillModeForwards;

另请参阅:After Animation, View position resets


另请注意,将动画直接应用于视图本身可能会有所帮助,而不是通过访问视图的图层。这是使用动画块完成的,我发现它非常有用。

可以通过多种方式自定义块样式动画,但这是一个基本示例,当您的视图需要设置动画时,可以在函数内调用:

- (void) animateMyView
{
    CGRect newViewFrame = CGRectMake(x,y,w,h);
    [UIView animateWithDuration:0.5
                          delay:0
                        options: (UIViewAnimationOptionCurveLinear )
                     animations:^{
                         self.myView = CGAffineTransformMakeRotation (45);
                         [self.myView setBounds:newViewFrame];
                    }
                     completion:NULL];
}

有关详细信息,请参阅Apple's documentation on View Animation