这个很棘手!
我有视图A和视图B,它是视图A的子视图。两个视图的帧都是不变的。
我通过改变变换矩阵来旋转视图A:
viewA.transform = CGAffineTransformMakeRotation(angle);
现在我想调整视图B的变换矩阵,使视觉位置和旋转保持不变,即B在改变A的旋转角度时不得移动/旋转。
显然我需要在相反方向旋转视图B,但这还不够。
我尝试了这个,但B仍然摇摆不定:
viewB.transform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(-angle), viewA.bounds.size.width, viewA.bounds.size.height);
也许正确的矩阵也取决于viewB的框架...也许我需要使用正弦和余弦......?
我知道,我可以简单地让B成为A的兄弟姐妹观点,但我不想这样做。
答案 0 :(得分:0)
嗨试试这个让我知道请
viewB.transform=CGAffineTransformInvert(viewA.transform)
答案 1 :(得分:0)
突然出现了两件事。
首先,为什么不从视图A中删除视图B并将其附加到视图A的超视图(即使它仅用于旋转序列)?它在视觉上是相同的。
我的另一个想法是将动画包装在CATransaction中以保持动画同步。
我仍然建议不要在视图A上保持视图B并且必须运行两个动画,而不是仅仅一个。你是在视图A中保持视图B的原因,因为它的剪辑是基于它的界限吗?
这是使用图层,但它与视图的作用相同:
[CATransaction begin];
[CATransaction flush];
[CATransaction setAnimationDuration:2.0f];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
CATransform3D transform = CATransform3DMakeRotation(M_PI/4, 0, 0, 1);
outerLayer.transform = CATransform3DConcat(outerLayer.transform, transform);
innerLayer.transform = CATransform3DInvert(outerLayer.transform);
[CATransaction commit];