0

UIScrollView 内に一連の UIViews があり、ルート ビュー コントローラーが willAnimateRotationToInterfaceOrientation:duration: を受け取ったときにサイズ変更しようとしています:

これがコードです...

(Panel は単なる拡張 UIView です。panels は、拡張 UIScrollView によって保持される Panel の NSMutableArray です)

for(Panel * panel in panels)
{
  panel.bounds = CGRectMake(panel.bounds.origin.x,
                            panel.bounds.origin.y,
                            self.bounds.size.width,
                            panel.bounds.size.height);
}

NSLog(@"%@", [panels description]);

これself.bounds.size.widthは UIScrollView です (クラスを拡張しました)。

これは、デバイスが横向きの場合の NSLog の結果です...

"<Panel: 0x74324d0; frame = (-80 0; 480 50); animations = { bounds=<CABasicAnimation: 0xe1339d0>; }; layer = <CALayer: 0x7432530>>",
"<Panel: 0x7435ce0; frame = (-80 53; 480 50); animations = { bounds=<CABasicAnimation: 0xe133a90>; }; layer = <CALayer: 0x7435d40>>",
"<Panel: 0x7438e20; frame = (-80 106; 480 50); animations = { bounds=<CABasicAnimation: 0xe133ab0>; }; layer = <CALayer: 0x7438e80>>",
"<Panel: 0x7438eb0; frame = (-80 159; 480 50); animations = { bounds=<CABasicAnimation: 0x714f890>; }; layer = <CALayer: 0x7438f10>>",
"<Panel: 0x7438f40; frame = (-80 212; 480 50); animations = { bounds=<CABasicAnimation: 0x742ffd0>; }; layer = <CALayer: 0x7438fa0>>"

そしてポートレートに戻すと……

"<Panel: 0x7480350; frame = (0 0; 320 50); animations = { bounds=<CABasicAnimation: 0x74a3b40>; }; layer = <CALayer: 0x74803b0>>",
"<Panel: 0x7483c90; frame = (0 53; 320 50); animations = { bounds=<CABasicAnimation: 0x74a3bd0>; }; layer = <CALayer: 0x7483cf0>>",
"<Panel: 0x7486dd0; frame = (0 106; 320 50); animations = { bounds=<CABasicAnimation: 0x74a3c60>; }; layer = <CALayer: 0x7486e30>>",
"<Panel: 0x7486e60; frame = (0 159; 320 50); animations = { bounds=<CABasicAnimation: 0x74a3cf0>; }; layer = <CALayer: 0x7486ec0>>",
"<Panel: 0x7486ef0; frame = (0 212; 320 50); animations = { bounds=<CABasicAnimation: 0x74a3d80>; }; layer = <CALayer: 0x7486f50>>"

bounds.origin.x が (0) で始まるもの以外でなければならない理由はわかりません。明らかなことに違いありませんが、私はそれを見ることができません-おそらく、新鮮な目で私が間違っていることに気付くでしょう.

4

1 に答える 1

0

フレームと境界の違いを確認する必要があると思います

境界を設定すると、スーパービューのビューのフレームが変更されるため、境界ではなくフレームを設定する必要があります。

これが役立つことを願っています。

于 2013-02-01T14:44:34.650 に答える