1

我想知道如何在动画期间的任意时间点获取展开的圆形动画的直径(或半径)。我会在获得大小后立即停止动画,但是我无法停止并从图层中移除它,直到获得圆的大小。在任何时间点获取CABasicAnimation中展开的圆的大小

有关扩展圆形动画如何实现的示例,它是iPhone Quartz2D render expanding circle问题答案中addGrowingCircleAtPoint:(CGPoint)point方法中所示实现的变体。

我试图检查图层,动画等各种值,但似乎无法找到任何东西。我认为更糟糕的情况是,我可以尝试通过将当前时间放入其动画并使用该时间来根据它的大小状态来确定其“应该”位于何处。这看起来像是矫枉过正,因为我认为这是一个增加了我可以轻松获得的地方的价值。

更新:

我试图在表现层的几个属性,包括变换这似乎永远不会改变所有的值总是一样的,不管这个循环是在检查的时候是什么大小。

回答

2

好的,这里是你如何获得动画的当前状态,而它是动画。

Rob在接近时忽略了两条关键信息。

首先来自layer.presentationLayer.subLayers,你必须得到你正在动画的图层,这对我来说是唯一可用的子图层。

其次,从这个子层你不能直接访问转换,你必须通过valueForKeyPath来获得transform.scale.x。我用x是因为它的一个圆和x和y是一样的。

然后我用它来计算基于用于创建弧的值时的圆的大小。

+0

+1这很有用。我不清楚你的意思是“不能直接访问变换”。你是说--transform和-valueForKey:@“transform”返回不同的东西?或者你的意思是使用KVC呼叫达到规模更方便吗? – 2011-04-14 12:18:40

-1

我假设你想要得到的是当前的CATransform3D,从那里你可以得到你的圈子大小。您要的是layer.presentationLayer.transform。有关presentationLayer的详细信息,请参阅CALayer文档。另请参阅Core Animation Rendering Architecture

+0

我在断点的调试模式下看到了这一点,但我没有看到任何提供当前圆圈大小的东西,实际上在转换中暴露的东西很少。什么性质或方法为我提供直径或半径?当失败时,我尝试使用presentationLayer上的值,像界限的宽度,但它始终是0.哪个“图层”你说的是UIView或CAShapeLayer的一部分,我在创建和启动动画的方法中创建的?我是否需要将转换转换为CATransform3D或其他? – 2011-04-13 04:16:30

+0

任何包含“当前半径”的地方都不会有任何变量。您正在将一个圆圈绘制到一个图层中,然后使用变换来缩放图层。您将通过应用当前比例因子来计算当前半径。如果您不了解转换,您可能需要备份并确保您了解已复制的代码。首先阅读Core Animation Programming Guide。 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html – 2011-04-13 15:28:28

+1

你正在居高临下和推定。而不是提供快速帮助这是什么StackOverflow是关于你说什么“我知道怎么样,但我不会告诉你,因为我花时间通过阅读和去学校学习,而显然你只是一个白痴谁复制代码,所以我只会指出你阅读材料,而不是回答你的问题。“你不认识我,谢谢你。我知道“足够”关于动画和转换来理解代码示例,但我仍然在学习,并且我希望得到一些快速的帮助来解决SO的问题。 – 2011-04-14 02:42:54

相关问题