使用CALayer作为子视图动画UIView框架

Rui*_*res 7 iphone core-animation calayer uiview ios

是)我有的:

我有UIView's一个层次结构和一个CAGradientLayer用于设置此层次结构的"背景颜色"的层次结构.所以我有这样的事情:

ViewA - > ViewB - > CAGradientLayer

我在做什么:

有一次,我想要为frameViewA 设置动画(只有它的高度).所以它会是这样的:

[UIView animateWithDuration:timeInterval
                      delay:0
                    options:UIViewAnimationOptionCurveEaseIn
                 animations:^{
                              viewA.frame = newFrame;
}];
Run Code Online (Sandbox Code Playgroud)

问题:

这个问题是它CAGradientLayer不会为它的框架设置动画,它只是改变它的框架,然后viewA开始按预期动画(通过将模拟器设置为慢动作动画可以清楚地看到这一点).

我尝试了什么:

我试图做什么苹果建议在这里,通过做它里面UIView动画块,但它实际上并没有工作,因为我仍然在这里动画帧:

viewA.frame = newFrame;
Run Code Online (Sandbox Code Playgroud)

我也明白我应该为边界设置动画,而不是框架CALayer,问题在于,我如何设置动画边界,并且在动画ViewA的框架时将其留CALayer在动画之外?

我想要的是:

我只想动画它高度的变化,所以我会同时看到动画viewACAGradientLayer动画.

Nir*_*att 2

首先,请阅读本文

尝试将视图动画代码与图层动画一起显式封装。不要指望图层会自动生成动画。由于您正在处理定位,因此您需要进行更改graidentlayer.bounds

如果这不起作用,请在动画代码之前尝试以下操作:

[CATransaction begin];    
[CATransaction setDisableActions: NO];    
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)