Iphone 旋转superview后计算CGAffineTransform矩阵

Iphone 旋转superview后计算CGAffineTransform矩阵,iphone,ios,uiview,rotation,cgaffinetransform,Iphone,Ios,Uiview,Rotation,Cgaffinetransform,这个很棘手 我有视图A和视图B,它们是视图A的子视图。两个视图的框架都是恒定的 我通过更改变换矩阵来旋转视图A: viewA.transform = CGAffineTransformMakeRotation(angle); 现在我想调整视图B的变换矩阵,以便视觉位置和旋转保持不变,即B在更改A的旋转角度时不得移动/旋转 显然,我需要以相反的方向旋转视图B,但这还不够 我试过了,但B仍然摇摆不定: viewB.transform = CGAffineTransformTranslate(CGA

这个很棘手

我有视图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);
也许正确的矩阵也取决于视图的帧。。。也许我需要用正弦和余弦


我知道,我可以简单地让B成为a的兄弟视图,但我不想。

嗨,试试这个,请告诉我

viewB.transform=CGAffineTransformInvert(viewA.transform)

两件事突然出现在我的脑海里

首先,为什么不从视图A中删除视图B并将其附加到视图A的superview(即使它只是用于旋转序列)?它在视觉上是相同的

我的另一个想法是将动画包装在CATTransaction中以保持动画同步

我仍然建议不要将视图B保留在视图A上,并且必须运行两个动画,而不是一个。您之所以将视图B保留在视图A中,是因为它的剪裁基于它的边界吗

这适用于图层,但适用于视图:

[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];

这与动画无关!我不是说我设置了变换属性的动画。我知道我可以将B保持在A之外,但这并不能回答我的问题。你是在瞬间将变换应用于视图吗?这不会让用户感到困惑吗?如果视图通过流体运动从一个位置过渡到下一个位置,则这确实是一个动画。这两个建议都可以防止视图被变换搞砸。如果您不愿意尝试其他动画样式,为什么不“想”将视图B设为同级视图。这没有任何意义。好吧,同时我通过创建一个新视图并添加a和B作为子视图来解决它。但我仍然对当B是A的子视图时如何计算变换矩阵感兴趣。我只接受给出正确公式的答案。你在开玩笑吗?我的CATTransaction使视图动画保持同步。这怎么不是答案?你试过了吗?我刚刚为你的问题做了一个示例项目,效果很好。在拒绝之前,请尝试回答。这与视图B.transform=CGAffineTransformMakeRotation(-angle)相同,因为
CGAffineTransformInvert(CGAffineTransformMakeRotation(angle))
CGAffineTransformMakeRotation(-angle)
完全相同。正如我提到的,轮换是不够的。我不明白你的答案,你最终想要实现什么。