2017-08-20 26 views
0

我的主視圖中有兩個按鈕和一個UIImageView。一個按鈕嘗試將UIImageView旋轉30度,另一個按鈕將UIImageView的框架更新爲自身。在使用CGAffineTransform旋轉後更新UIImageView框架時奇怪的壓扁

我不希望將框架設置爲自身以影響任何視覺效果,但是如果它處於默認方向以外的旋轉中,它似乎會「擠壓」圖像。我偶然發現了這一點,因爲我想更新UIImageView的框架,以便在旋轉後更改它的x和y座標。

因此,只要我從不推送更新框架按鈕,旋轉按鈕似乎工作正常。然而,如果我在視圖旋轉的同時按第二個按鈕,它會將圖像擠壓到我不明白的狀態,或者知道如何撤消。 https://streamable.com/ba7zd

視頻的第二個按鈕只有「壓扁」,而旋轉是不是默認的方向:https://streamable.com/vo3cd

是什麼原因,這

第二個按鈕「壓扁」的形象視頻正在發生? This questionthis question都似乎捕捉到類似的情況,但我不確定如何應用這兩種解決方案。

在ViewController中:

@IBOutlet weak var dog: UIImageView! 

@IBAction func breakRotate(_ sender: UIButton) { 
    self.dog.frame = self.dog.frame // squishes if rotated 
} 

@IBAction func rotateDog(_ sender: UIButton) { 
    UIView.animate(withDuration: 1.5, delay: 0, options: [.allowUserInteraction], animations: { 
     self.dog!.transform = self.dog!.transform.rotated(by: CGFloat(0.523599)) // 30 degrees in radians 
    }) 
} 

圖片:

enter image description here

回答

2

施加旋轉之後從frame屬性返回的值是不旋轉的框架,它是最小外接矩形包圍該視圖可以與實際框架的大小不同。 (documentation說,框架將是不確定的,應該被忽略,但實際上它返回的最小邊界矩形

當您將轉換爲一個觀點,你不應該改變的框架,因爲它可以與改造干擾。

如果你想改造後改變位置,你應該改變看法的center屬性:

dog.center = newCenterPoint 

最後至於爲什麼你看到的是不同尋常的效果,當你做了改造它會自動處理將框架調整爲新的最小邊界矩形而不會弄亂圖像的大小,但是當您將新的更改框架應用到視圖時,它不會知道這是變換的結果,並會嘗試調整您的大小形象,這就是爲什麼你的形象變得像這樣擠壓。