デバッガーがブレークポイントで停止すると、そこにUIViewのフレームが見つかりません。
これを行うことは可能ですか?
編集:応答の欠如のために報奨金を開始します。明確にするために、私が探しているのは、追加のデバッグコードを追加せずにフレームを表示する方法です。
また、答えが「あなたはそれを行うことができない」である場合、報奨金は、なぜあなたがクラスのメンバーを見ることができるが他のメンバーを見ることができないかについての最良の説明に行きます。
はい、できます。デバッグ中に、変数インスペクターで目的のUIViewを見つけます。 Controlキーを押しながらクリックして、[説明をコンソールに出力]を選択します。たとえば、UIViewControllerの_view ivarでこれを実行すると、コンソールに次のように表示されました。
_viewの説明の印刷:
<UIView:0x25b460;フレーム=(0 0; 320 480);自動サイズ変更= W + H;レイヤー= <CALayer:0x26b740 >>
デバッガーパネルに移動すると、ブレークポイントにいるときに次のように入力できます。
(gdb) print (CGRect) [self frame]
$1 = {
Origin = {
x = 0,
y = 0
},
size = {
width = 100,
height = 100
}
}
コンソールデバッガー を使用する場合、上矢印キーを押して前のコマンドを切り替えることができます。コマンドを入力せずにreturnキーを押すと、最後のコマンドが繰り返されます。
@EPage_Edの回答を再フォーマットするのは、オリジナルが特定のケースのためにハードコーディングされたためです。
(lldb)プロンプトで、次のように入力します。
print (CGRect)[view frame]
または、境界について:
print (CGRect)[view bounds]
NSLog(@"My view frame: %@", NSStringFromCGRect(myView.frame));
XCode 5.1.1では、UIViewである変数にカーソルを合わせると、次のタイプのポップオーバーが表示されます。
「i」ボタンをクリックすると、次のタイプの出力がデバッガーのコンソールに出力されます。
<UIImageView: 0xa49ca90; frame = (0 0; 640 360); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0xa46c1c0>>
これは、UIViewのフレームを検査する別の方法です。
po [[[[UIApplication sharedApplication]windows] objectAtIndex:0] recursiveDescription]
ビュー階層全体を出力しますが、llvmではなくgdbでのみ機能するようです
興味深いことに、getterメソッドを使用してビューのフレームを返すと、次のように機能します。
print (CGRect)[view frame]
これにより、期待される結果が得られます。
(CGRect) $2 = Origin=(x=0, y=20) size=(width=320, height=48)
しかし、ドット表記を使用しようとすると、単に「構文糖」のために提供されているとよく言われます。
print (CGRect)view.frame
次のエラーが発生します。
error: C-style cast from '<unknown type>' to 'CGRect' is not allowed
Xcodeで、コンソールに移動して次のように入力します。
po viewName
実行がビューのコード内である場合、次のことができます。
po self
これにより、次のようなビューの詳細が出力されます。
<UIView: 0x9cca0f0; frame = (0 0; 320 480); layer = <CALayer: 0x9ccabe0>>
Lldbでフレームを印刷するには、印刷用の短い形式、つまり「p」を使用します。たとえば.
p (CGRect)[view frame]
Lldbの回答が見つかりました。たとえば、これは機能します
(lldb) print (CGRect)[((UIView *)[[[self backIV] subviews] objectAtIndex:1]) frame]