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との間に違いがあります。あなたのコードでは両方を混在させており、結果は期待したものではありません。boundstransform

  1. を設定して回転を適用しますtransform

  2. origin新しいフレームと のサイズの長方形を作成しますbounds。を使用boundsしても変化しませんでしたtransform

  3. この rect を に設定しframeます。ビューは移動しませんが (同じorigin)、外側の寸法を変更しているため縮小されます。

  4. 同じ rect を に設定しboundsます。bounds.originゼロ以外の値に設定するとどうなるかわかりませんが、ボタンの内容が翻訳される可能性があります。bounds.sizeまた、以前と同じに設定されているため、ボタンを拡大します。

明確にするために:

  • bounds=内部座標系のrect で、通常originはゼロ (スクロール ビューを除く) で、目的のサイズです。
  • frame=スーパービュー (外側) 座標系のrect で、 anyoriginと thesize は と同じ場合がありますbounds.size。、およびのframe計算です。centerboundstransform
  • transform= どのようboundsに変換されてframe. 内部座標から外部座標へのマッピング。

サイズ付きのボタンが{50, 80}あり、90°回転を適用すると、 は同じbounds.sizeなり、変更されませんが、新しい変換されたサイズが反映されます。 {50, 80}centerframe{80, 50}

私はそれが今明確であることを願っています。


更新:と の違いを示す画像を次に示しframeますbounds
フレームと境界
濃い四角はbounds、薄い四角はframeです。最初の画像では、それらは同じサイズです。2 番目の画像では、ビューが回転していtransformます。

于 2013-03-07T11:07:16.040 に答える