2

转换后 uibutton 更改高度和 setFrame 不起作用。在这之后。帮我。我的代码在这里:

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
4

1 回答 1

0

frame和之间是有区别的bounds,尤其是当您更改transform. 在您的代码中,您将两者混合在一起,结果不是您所期望的。

  1. 您通过设置应用一些旋转transform

  2. origin您使用新框架和大小创建矩形boundsbounds没有改变使用transform.

  3. 您将此矩形设置为frame. 视图不会移动(相同origin),但会按比例缩小,因为您正在更改外部尺寸。

  4. 您将相同的 rect 设置为bounds. 我不确定如果您设置bounds.origin为非零值会发生什么,但按钮的内容可能会被翻译。它还会放大按钮,因为bounds.size设置为与以前相同。

要清楚:

  • bounds=内部坐标系中的矩形,通常origin为零(滚动视图除外)并具有所需的大小。
  • frame= rect in superview (outer) coordinate system , with anyorigin和 thesize 可能与bounds.size. framecenter,bounds和的计算transform
  • transform= 如何bounds转换为 make frame。内部坐标到外部坐标的映射。

如果您有带尺寸的按钮{50, 80}并应用 90° 旋转,bounds.size则将是相同的 {50, 80},也center不会改变,但会frame反映新的转换后的尺寸{80, 50}

我希望现在很清楚。


更新:frame这是一张显示和之间差异的图像bounds
框架与边界
暗方是bounds,浅方是frame。在第一张图片上,它们具有相同的大小。在第二张图片上,视图已旋转transform

于 2013-03-07T11:07:16.040 回答