有人可以解释 UIView 的奇怪旋转吗?

Posted

技术标签:

【中文标题】有人可以解释 UIView 的奇怪旋转吗?【英文标题】:Can someone explain bizarre rotation of UIView? 【发布时间】:2013-01-23 02:22:40 【问题描述】:

我正在尝试使用以下代码在包含一些 CALayers 的 iPhone 上旋转 320x320 UIView(黑色):

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:2];
    CGAffineTransform rr=CGAffineTransformMakeRotation(M_PI_2*2);
    self.transform=rr;
    [UIView commitAnimations];

请注意,M_PI_2 是 pi/2 (math.h)。此代码将视图旋转 180°。但是,如果我将它自己更改为 M_PI_2(没有 *2),黑色 UIView 消失,内容向下和向右移动,然后大部分旋转到屏幕外。为什么是这样?我很困惑为什么视图不只是旋转 90°。

【问题讨论】:

M_PI_2*2 很傻,就用M_PI吧。 当然,我在搞乱价值观,试图理解这种奇怪的行为。 如果我把它改成 [self.layer setAffineTransform:rr];然后它工作。很奇怪。 【参考方案1】:

因为transformaffineTransform 不同。 transform 需要一个 CATransform3D 结构,因此您应该改用便捷方法 setAffineTransform

编辑

所以看来self 是一个 UIView,我上面的答案是无关紧要的。尝试使用[UIView setAnimationBeginsFromCurrentState:YES]

【讨论】:

嗯,uiView.transform 是 CGAffineTransform,你说的 layer.transform 是真的。为什么差异很奇怪。 哦。如果self 是 UIView,那么我的回答没有意义。我会更新我的答案。

以上是关于有人可以解释 UIView 的奇怪旋转吗?的主要内容,如果未能解决你的问题,请参考以下文章

printf - 奇怪的混杂结果。有人可以解释一下吗?

有人可以解释为啥条件运算符和赋值运算符一起使用时表现奇怪吗?

UIView 子视图不是为 iPad 自动旋转或自动调整大小

有人能解释一下猪的这个奇怪的错误吗

swift - 当设备旋转到横向(iPhone/iPad)时,如何让 UIView 变成全屏?

以编程方式创建UIView,在旋转设备时保留其大小