2013-10-29 52 views
1

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

这里是导致此问题的代码:

[UIView的beginAnimations:无上下文:NULL];

[UIView setAnimationDuration:2.5];

circle.transform = CGAffineTransformMakeScale(5,5); 


[UIView setAnimationRepeatAutoreverses:NO]; 

[UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 

circle.alpha = 1.0; 

[UIView commitAnimations]; 

回答

0

这是关于在Core Animation对象内表示的不同树。从here

使用Core Animation的应用程序有三组图层对象。每一集层对象的 有让您 应用的内容不同的角色出现在屏幕上:在模型层树

  • 对象(或简称为“层树”)是您的应用程序最相互作用的那些。此树中的对象是存储任何动画的目标值的模型对象。 只要您更改图层的属性,就可以使用这些对象中的一个。
  • 表示树中的对象包含任何正在运行的动画的正在运行的值。尽管图层树对象包含动画的 目标值,但演示树 中的对象反映了屏幕上显示的当前值。你绝不应该修改这棵树中的对象 。相反,您可以使用这些对象读取当前动画值,也许可以创建一个以这些值开始的新动画 。
  • 渲染树中的对象执行实际的动画,并且是Core Animation专用的。

这意味着你什么,是一旦动画完成后,您需要确保在表示层的变化(这是动画的主题)都反映在模型层。这通常可以通过禁用动画并设置最终属性值来实现。

+0

非常感谢trojanfoe为您快速回复。对此,我真的非常感激。我对这个整体目标还是陌生的,所以如果你请告诉我我该怎么做。 – user2828182

0

找到了答案,现在我知道为什么图像位置每次都不断重置。这是因为CGAffineTransformMakeScale覆盖了当前位置与原始位置,所以我使用CGAffineTransformScale来代替,并解决了我的问题。

这里是为我工作的代码:

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

     completion:^(BOOL finished) { 

       }]; 

我希望这可以帮助其他人尽可能帮助我!

再次感谢您trojanfoe的回答何种帮助我在我的寻找正确的答案;)