1

这个问题已经困扰我好几天了,我似乎无法找到任何解决方案。我的项目只是关于一个上面有一些文本的圆圈,所以当我按下一个按钮时,它会变得足够大,以便可以轻松阅读文本。但是,文本围绕圆圈以圆形方式分布,所以我首先需要旋转圆圈,然后当其中一个文本就在我面前时,我按下按钮来调整圆圈的大小,而不是开始从旋转后的最后一个位置,它被重置为其初始位置。我该如何解决这个问题?谢谢你。

以下是导致此问题的代码:

[UIView beginAnimations:nil context:NULL];

[UIView setAnimationDuration:2.5];

circle.transform = CGAffineTransformMakeScale(5,5);


[UIView setAnimationRepeatAutoreverses:NO];

[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

circle.alpha = 1.0;

[UIView commitAnimations];
4

2 回答 2

0

这与核心动画对象中表示的不同树有关。从这里

使用 Core Animation 的应用程序具有三组图层对象。每组图层对象在使您的应用内容出现在屏幕上时都有不同的作用:

  • 模型层树(或简称“层树”)中的对象是您的应用程序与之交互最多的对象。此树中的对象是存储任何动画目标值的模型对象。每当您更改图层的属性时,都会使用这些对象之一。
  • 表示树中的对象包含任何正在运行的动画的运行中值。图层树对象包含动画的目标值,而表示树中的对象反映了当前值,因为它们出现在屏幕上。您永远不应修改此树中的对象。相反,您使用这些对象来读取当前动画值,也许是从这些值开始创建一个新动画。
  • 渲染树中的对象执行实际的动画并且是核心动画私有的。

这对您来说意味着,一旦动画完成,您需要确保表示层(即动画的主题)中的更改反映在模型层中。这通常可以通过禁用动画和设置最终属性值来实现。

于 2013-10-29T09:14:21.223 回答
0

找到了答案,现在我知道为什么图像位置每次都会被重置。这是因为 CGAffineTransformMakeScale 用原始位置覆盖了当前位置,所以我改用 CGAffineTransformScale 并为我解决了问题。

这是对我有用的代码:

[UIView animateWithDuration:2.5 延迟:0 选项:UIViewAnimationOptionCurveLinear 动画:^{image.transform = CGAffineTransformScale(image.transform, 5, 5);}

                       completion:^(BOOL finished) {

                 }];

我希望这对其他人有帮助,就像它对我有帮助一样!

再次感谢 trojanfoe 的回答,这有助于我寻找正确的答案;)

于 2013-10-30T02:34:33.703 回答