我有一个UIView。我将动画应用到了CALayer。
[view.layer addAnimation:groupAnimation forKey:name];
我希望图层的最终状态是动画后UIView的状态。让我们说我旋转了45度并使用该层移动到一个新位置;动画后我的视图是否可能处于该状态?因为现在,在动画之后,它又回到了UIView的原始状态。我希望能得到一些帮助。感谢。
答案 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。