改变uibutton变化高度

时间:2013-03-07 10:38:47

标签: objective-c transform frame

变换后的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

1 个答案:

答案 0 :(得分:0)

framebounds之间存在差异,尤其是在您更改transform时。在你的代码中你混合两者,结果不是你所期望的。

  1. 您可以通过设置transform

  2. 来应用一些轮播
  3. 您可以使用新框架originbounds的尺寸创建矩形。 bounds使用transform没有更改。

  4. 您将此rect设置为frame。视图不会移动(相同的origin),但会缩小,因为您正在更改外部尺寸。

  5. 您将同一个矩形设置为bounds。我不确定如果将bounds.origin设置为非零值会发生什么,但按钮的内容可能会被翻译。此外,它还会按下按钮,因为bounds.size设置为与以前相同。

  6. 要明确:

    • bounds = 内部坐标系中的矩形,通常为origin零(滚动视图除外)且所需大小。
    • frame = superview(外部)坐标系中的矩形,任意originsize 可能与{{1>相同}} 即可。 bounds.sizeframecenterbounds的计算。
    • transform =如何transform转化为bounds。内部坐标到外部坐标的映射。

    如果您有尺寸为frame的按钮且旋转90°,则{50, 80}相同 bounds.size{50, 80}不会更改,但center会反映新转换的尺寸frame

    我希望现在很清楚。


    更新:以下是显示{80, 50}frame之间差异的图片。
    Frame vs. bounds
    黑色方块为bounds,浅色方块为bounds。在第一张图片上,它们具有相同的尺寸。在第二张图片上,视图已旋转frame