13

NSLogを使用してUITextViewを検査しています。コードに次のログステートメントがあります。

    NSLog(@"textView: %@",textView);
    NSLog(@"textView.frame: %@",textView.frame);
    NSLog(@"[textView frame]: %@",[textView frame]);

そして、コンソールへの出力で、私は次のようになります:

2010-11-29 22:00:38.252 MenuMaker[57602:207] textView: <UITextView: 0x3b3afe0; frame = (0 0; 320 387); text = 'blah...'; clipsToBounds = YES; autoresize = RM+BM; layer = <CALayer: 0x3b3afa0>>
2010-11-29 22:00:38.254 MenuMaker[57602:207] textView.frame: (null)
2010-11-29 22:00:38.254 MenuMaker[57602:207] [textView frame]: (null)

出力の最初の行には、「frame =(0 0; 320 387)」ビットが含まれているため、UITextViewのフレーム変数がすべて設定されていると思います。しかし、その場合、なぜ次の2行がnullを示すのでしょうか。フレームの値をダンプするべきではありませんか?

前もって感謝します

4

5 に答える 5

50

他の人が指摘しているように、CGRectは単なる構造体であるため、-descriptionメソッドがありません(NSLogで使用されるNSStringの+ stringWithFormat静的メソッドが%@をフォーマット文字列で置き換えます)。したがって、NSLogに直接渡すことはできません。

ただし、提案されているように個別に値を出力する必要はありません。Cocoaは、いくつかのCoreGraphics構造を文字列にレンダリングするいくつかの組み込みメソッドを提供します。

NSStringFromCGRect()
NSStringFromCGPoint()
NSStringFromCGSize()
NSStringFromCGAffineTransform()

等々。したがって、CGRectを文字列の形式で出力するのは非常に簡単になります。

NSLog(@"%@", NSStringFromCGRect(rect));

これらすべてのヘルパーメソッドは、ここの「文字列変換」の下にあります。</ p>

于 2010-11-29T12:23:26.623 に答える
10

以下のようにすることもできます

NSLog(@"%@",[NSValue valueWithCGRect:textView.frame]);
于 2010-11-29T11:49:55.850 に答える
4

UIView.frameは単なるCGRect構造体です(これには、CGPointCGSize構造体が含まれています)。したがって、クラスは関与せず、文字列表現を持つことができるのはクラスのみであるため、表示されますnull。フレームの値が必要な場合に実行する必要があるのは、次のようなものです。

NSLog(@"textView.frame origin: %f %f", textView.frame.origin.x, textView.frame..origin.y);
NSLog(@"textView.frame size: %f %f", textView.frame.size.width, textView.frame.size.height);
于 2010-11-29T11:19:39.403 に答える
3

textview。frameはCGRect値を返します。したがって、textViewのフレーム値を知りたい場合

NSLog(@"textView frame height: %f",textView.frame.size.height);
NSLog(@"textView frame width: %f",textView.frame.size.width);
NSLog(@"textView frame x Position: %f",textView.frame.origin.x);
NSLog(@"textView frame y Position: %f",textView.frame.origin.y);

NSLogは、受け取ったオブジェクトを認識しない場合、その値をnullと見なします。

于 2010-11-29T11:19:54.153 に答える
-1

Swiftでは簡単です。

println("\(textView.frame)")
于 2014-11-24T10:07:15.787 に答える