2013-03-07 73 views
2

變換UIButton更改高度後,setFrame不起作用。在這之後。幫我。我的代碼在這裏:變換UIButton更改高度

NSLog(@"BEFORE_Frame_height = %f", nameBgBtn.frame.size.height); 
NSLog(@"BEFORE_Bound_height = %f", nameBgBtn.bounds.size.height); 
nameBgBtn.transform = CGAffineTransformMakeRotation(degreesToRadian(rndValue)); 
CGRect newFrame = CGRectMake(nameBgBtn.frame.origin.x,nameBgBtn.frame.origin.y, nameBgBtn.bounds.size.width, nameBgBtn.bounds.size.height); 

[nameBgBtn setFrame: newFrame]; 
[nameBgBtn setBounds:newFrame]; 
NSLog(@"After_Frame_height = %f", nameBgBtn.frame.size.height); 
NSLog(@"After_Bount_height = %f", nameBgBtn.bounds.size.height); 

我的記錄:

2013-03-07 15:30:23.887 BEFORE_Frame_height = 46.000000 
2013-03-07 15:30:23.888 BEFORE_Bound_height = 46.000000 
2013-03-07 15:30:23.888 After_Frame_height = 49.887489 
2013-03-07 15:30:23.888 After_Bound_height = 46.000000 

回答

0

framebounds之間的差異,尤其是當你正在改變transform。在你的代碼中,你正在混合這兩者,結果並不是你所期望的。

  1. 通過設置transform來應用一些旋轉。

  2. 您可以使用新框架bounds的尺寸創建origin的矩形。 bounds沒有改變使用transform

  3. 您將此矩形設置爲frame。視圖不會移動(與origin相同),但會縮小視圖,因爲您正在更改外部尺寸。

  4. 您將相同的矩形設置爲bounds。我不確定如果將bounds.origin設置爲非零值會發生什麼情況,但可以翻譯按鈕的內容。此外,它將按鈕縮放,因爲bounds.size被設置爲與之前相同。

要明確:

  • bounds = RECT在內座標系,通常的零origin(除了滾動視圖),並用所需的尺寸。在上海華(外)
  • frame =矩形座標系統,與任何originsize可以是相同bounds.sizeframe計算的是center,boundstransform
  • transform =如何將bounds轉換成frame。內部到外部座標的映射。

如果你有大小{50, 80}按鈕,應用90°旋轉,該bounds.size相同{50, 80},也center不會改變,但frame體現了新變換的尺寸{80, 50}

我希望現在很清楚。


更新:這裏是framebounds之間的圖像顯示差異。
Frame vs. bounds
黑方是bounds,方形光是frame。在第一張圖片上,它們的大小相同。在第二張圖片上,視圖旋轉了transform

+0

我已經轉變爲4度。我希望按鈕的高度沒有改變。我該怎麼辦? – 2013-03-07 11:21:16

+0

如果你想讓高度相同,不要改變'frame'。事實上,除了'transform'之外,你不需要改變任何東西。 「框架」會自動變大。用圖像查看更新的答案。 – Tricertops 2013-03-07 12:17:47

+0

我想你是不明白我的?我的UIButton在改變之後改變了它的原始高度。爲什麼,我不知道! – 2013-03-07 12:44:47