今天在做一个旋转动画时,需要这个view像时钟的针那样绕中心点旋转。
默认一个视图旋转时是绕自身的中心点进行旋转的。
我知道本质上是围绕自身的锚点进行旋转的。
于是更改了锚点,锚点的默认值是(0.5,0.5) 我改成了(0.5,1.0) 在x轴方向上,位于视图的中间,在y轴方向上位于视图的底部。旋转起来达到理想的状态了。
但是问题出来了,更改锚点之后,视图的frame发生了变化。造成视图上移。
更改锚点是会更改frame的。我尝试在变更锚点之后重置frame。发现没有效果,但是上网看了看几乎都是如此处理的。其中有一篇我觉得写的很好。详解CALayer的anchorPoint和position。
真是尝试了好久,更改frame也不行,更改positon也不行。
把约束拉出来,设置完锚点之后重置设置约束,还是不行。
最终,原来是约束做的鬼。
一开始我是使用StoryBoard为视图添加的约束,要做动画变化的视图也在其中。
于是,后续无论修改frame,都无效。但是看约束明明没问题。
总之,这里要对视图做仿射变换,如果更改了锚点,就要重新设置frame,而约束可能造成代码重置frame失效。
最后的解决方案就是,要做变换的视图,不能使用约束。
要在代码中,计算frame值。在修改重置的时候,重置frame就好了。
网友评论