2016-02-24 25 views
0

我想在动画时更新CATransformLayer的子图层的颜色。有没有一种方法可以在动画CATransaction的持续时间内设置每个帧更新时执行的块?如果不是,在动画期间更新子层颜色的最佳方法是什么?我可以在CATransaction期间设置每帧更新执行的块吗?

[CATransaction begin]; 
[CATransaction setAnimationDuration:duration]; 
// The imaginary functionality of the following imaginary code is what I want to implement--though not at all in any form that resembles its imaginary form below 
[CATransaction setBlockThatExecutesPerFrameUpdate:^{ 
    for (CALayer *layer in self.transformLayer.sublayers) 
     [layer doSomethingWith:layer.presentationLayer.transform]; 
}]; 
// What I imagine ends here 
self.transformLayer.transform = [self sideTransform]; 
[CATransaction commit]; 
+0

请显示您实际正在执行的动画的代码。 – matt

回答

2

动画发生在它自己的进程(以下简称“动画服务器”)关闭主线程。在动画期间,没有任何种类的通知在每帧的基础上回到“你的”代码中,并且是正确的,因为这会使动画变得无法忍受,这可能会干扰你的代码。如果您想要在某个其他动画发生的同时更改颜色,则只需使用与其他动画相同的持续时间对颜色变化进行动画处理即可。当动画服务器得到控制时,您可以请求几个动画,并且它们都将一起进行。

+0

马特说什么。 (他打败了我,但他的回答是100%的钱,像往常一样。) –

+0

好的答案。我唯一要补充的是,当它动画时,你可以使用'CADisplayLink'并在每一帧获得图层的表现值。您将无法更改任何表示层值,但只能使用模型图层值(并且在动画之后才会显示它们) – Hamish

+0

@ originaluser2非常好的一点。我的确想到了这一点,但是我感觉到你对于我的左上角的感觉 - 离开这些杂草在教学上是不明智的。 – matt

相关问题