どうも。
UIを扱う場合なんかには、
座標系の構造体、
CGRect, CGPoint, CGSizeを扱うことが多い。
で、
位置とかサイズが可変になってくると、
ログ出しして確認したいのだが…。
CGRectを例にとってみると。
NSLog(@"xxxView.frame:%f, %f, %f, %f",
xxxView.frame.origin.x,
xxxView.frame.origin.y,
xxxView.frame.size.width,
xxxView.frame.size.height);
xxxView.frame.origin.x,
xxxView.frame.origin.y,
xxxView.frame.size.width,
xxxView.frame.size.height);
なんてやってたら、
面倒で仕方ない。
そんなとき、
NSStringFromCGRectというマクロがあって、
それを使うと…。
NSLog(@"xxxView.frame:%@", NSStringFromCGRect(xxxView.frame));
非常に簡潔に書ける!
こうすると、
xxxView.frame:{{0, 20}, {320, 548}}
といったログがコンソールに出る。
これは、
{{x, y}, {width, height}}
の形式。
CGPointやCGSizeも同じく、
NSStringFromCGPoint
NSStringFromCGSize
といったマクロが用意されている。
もっと出力を分かりやすくするなら、
CGRectCreateDictionaryRepresentationを使って、
NSLog(@"xxxView.frame:%@", CGRectCreateDictionaryRepresentation(xxxView.frame));
なんて書くと、
xxxView.frame:{
Height = 548
Width = 320;
X = 0;
Y = 20;
}
と、
ログが出ます。
heightとかWidthとか出てくれるんで一見分かりやすいですが…。
CGRectMakeするときなんかもそうなんですが、
一般にX, Y, Width, Heightの順番で捉えているので、
違和感はありますね。
こちらも同じく、
CGPointやCGSizeには、
CGPointCreateDictionaryRepresentation
CGSizeCreateDictionaryRepresentation
が用意されています。
個人的には、
上記のような座標やサイズのログはデバッグ用の使い捨てなので、
NSStringFromCGRectなんかでサクッとやっちゃうのが楽かと☆
小数できちんと確認したいなら自前で書くしかないですが、
そういうシーンにはほとんど出くわしたことない。
ちなみに、
NSStringFromXXXといったマクロには、
NSStringFromCGAffineTransform
NSStringFromCGPoint
NSStringFromCGRect
NSStringFromCGSize
NSStringFromClass
NSStringFromProtocol
NSStringFromRange
NSStringFromSelector
NSStringFromUIEdgeInsets
が用意されていて、
XXXFromStringで逆変換が出来ます。
使ったこともないですがw
ClassやProtocol, Selectorは、
変換と逆変換を巧みに使うことで、
リフレクションみたいなことが実現出来るかもしれませんが。
それでは。
ちゃお☆
まこぴー。