2015-09-08 105 views
0

我有一個UIButton,每當我點擊它時,我都希望它以一定量旋轉。如果我用這個代碼,並將其旋轉正好90度逆時針:當我使用CGAffineTransformRotate時,爲什麼我的按鈕會消失?

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); 

該按鈕雖然角度看起來是正確的,但是很奇怪地拉長了。

我只是想旋轉我的按鈕,沒有任何調整大小,在任何我想要的角度 - 我在這裏做錯了什麼?

更新:只有當我試圖移動/定位我的按鈕在viewDidLayoutSubviews內時纔會發生這種情況。我猜這是因爲變換的結果是調用viewDidLayoutSubviews,此時定位全部搞砸了。

如果我不試圖將按鈕放置在viewDidLayoutSubviews中,並且只在加載按鈕時設置autoresizingMask,它會在中間保持其正確的位置 - 除非通過更改轉換來旋轉它。此旋轉工作並旋轉按鈕到位,但只要我將設備旋轉到風景並回到肖像(有時只是當我去風景時),按鈕就會完全消失。

這個技巧似乎只適用於一個無需移動的控件(除了旋轉的東西)。

+0

我無法複製此內容。你確定你沒有其他轉換應用到按鈕?例如,您不能任意旋轉已翻譯的內容。請提供一份MCVE http://stackoverflow.com/help/mcve。 –

+0

@RobNapier:aha,如果我在'viewDidLayoutSubviews'中設置我的按鈕的位置,就會發生。如果我不試圖將其定位在那裏,則旋轉按預期正常進行。 – MusiGenesis

回答

0

所以我的問題是,當您在viewDidLayoutSubviews中重新定位視圖時(或者以任何方式重新定位視圖,例如通過autoresizingMask屬性),變換會變得潮水般。

我敢肯定,有一種方法可以解決這個問題,並具有如何實現轉換的實際知識,但我的簡單解決方法是將我的按鈕放到與按鈕大小相同的另一個視圖中,然後重新定位此容器視圖的位置我需要它。

相關問題