Ios 为什么在使用CGAffineTransformRotate时我的按钮会消失?

Ios 为什么在使用CGAffineTransformRotate时我的按钮会消失?,ios,objective-c,Ios,Objective C,我有一个UIButton,我希望每当我点击它时它都能旋转一个设定的量。如果我使用此代码并将其逆时针旋转90度: CGAffineTransform transform = CGAffineTransformRotate(self.transform, (-M_PI * 2.0) * 0.25); self.transform = transform; 一切都按预期工作(如果使用正值并顺时针旋转,也可以工作)。但是,如果我尝试将按钮旋转45度: CGAffineTransform tr

我有一个UIButton,我希望每当我点击它时它都能旋转一个设定的量。如果我使用此代码并将其逆时针旋转90度:

CGAffineTransform transform = CGAffineTransformRotate(self.transform, 
    (-M_PI * 2.0) * 0.25);
self.transform = transform;
一切都按预期工作(如果使用正值并顺时针旋转,也可以工作)。但是,如果我尝试将按钮旋转45度:

CGAffineTransform transform = CGAffineTransformRotate(self.transform, 
    (-M_PI * 2.0) * 0.125);
我的按钮完全消失了。如果我这样做:

CGAffineTransform transform = CGAffineTransformRotate(self.transform, 
    (-M_PI * 2.0) * 0.20);
按钮被奇怪地拉长了,尽管角度看起来是正确的

我只想在我想要的任意角度旋转我的按钮,没有任何大小调整,我在这里做错了什么

更新:仅当我尝试在
viewdilayoutsubviews
中移动/定位按钮时,才会发生这种情况。我猜这是因为变换的更改会导致调用viewDidLayoutSubviews,此时定位就会出错

如果我不尝试在VIEWDIDLAUDUBSIEVIEW中放置按钮,只在加载按钮时设置自动清除掩码,它将保持它在中间的正确位置——除非我通过改变转换来旋转它。这种旋转可以工作并将按钮旋转到位,但只要我将设备旋转到横向和纵向(有时就在我转到横向时),按钮就会完全消失


这个技巧似乎只适用于不必移动的控件(旋转的东西除外)。

所以我的问题是,当您在
viewDidLayoutSubviews
中重新定位视图时(或者如果它以任何方式重新定位,如通过autoresizingMask属性),变换会被套住


我确信有一种方法可以解决这个问题,那就是了解变换的工作原理,但我的简单解决方法是将我的按钮放在与按钮大小相同的另一个视图中,然后将容器视图重新定位到需要的位置。

我无法重现此方法。您确定没有对按钮应用其他变换吗?例如,不能任意旋转已翻译的内容。请提供一个MCVE。@RobNapier:aha,如果我在
viewDidLayoutSubviews
中设置按钮的位置,就会发生这种情况。如果我不尝试将其定位在那里,旋转将按预期正常工作。