2013-03-07 57 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