3

rootViewとしてカスタムUIViewセットがあります。UIViewController'sアプリケーションをランドスケープ モードで起動しましたが、rootView の境界に関していくつかの問題がありました。デバッグを行った後、Xcode のコンソールを使用して何が起こっているかを確認しました。ITCustomView'sクラスは私のrootViewUIViewController'sであり、UIView'sサブクラスです。だから私はした:

po self

そして結果:

ITCustomView: 0x15af30; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x15b070>>

そして、私はしました:

po [self layer]

そして結果:

CALayer:0x15b070; position = CGPoint (394 512); bounds = CGRect (0 0; 1024 748); delegate = <ITCustomView: 0x15af30; frame = (20 0; 748 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x15b070>>; sublayers = (<CALayer: 0x15a390>, <CALayer: 0x15b2c0>, <CALayer: 0xce2f6a0>); transform = CATransform3D (0 -1 0 0; 1 0 0 0; 0 0 1 0; 0 0 0 1); backgroundColor = <CGColor 0x15b040> [<CGColorSpace 0x1356e0> (kCGColorSpaceDeviceRGB)] ( 0.818317 0.818317 0.818317 1 )

だから私の質問は本当に:

  1. 横向きの場合、向きによってフレームを変更するべきではありませんか?

  2. これらの変換 (向きの変更) はレイヤー上でのみ「見える」のですか?

  3. の代わりに をUIView's使用して、(サブクラスがいつ終了するかを知るために) 境界のチェックを開始する必要がありますか?self.layer.boundsself.frame

  4. self.layer.bounds変換の可能性があるため、常に を使用する方が安全ですか (別名: ベスト プラクティス) ?

この種の行動に今だけ気づいたのは奇妙です(そして自分自身を少し恥ずかしく思います)。

4

1 に答える 1

6

frameスーパービューの座標系で表現されるため、スーパービューの観点からのみ実際に関連します。

内部的な目的では、ビューのboundsrect を使用する必要があります。

したがって、サブ質問については次のとおりです。

  1. いいえ、代わりに境界を確認してください。
  2. いいえ、代わりに境界を確認してください。
  3. いいえ、代わりに境界を確認してください。
  4. いいえ、代わりに境界を確認してください。

レイヤーの境界を確認する必要はありません。ビューの境界を使用できます。したがって、質問のタイトルは実際には self.frame vs self.bounds にする必要があり、通常は境界が勝ちます。

于 2012-07-26T14:31:34.687 に答える