2012年1月23日
【iOS】Viewの開発・デバッグに役立つ色々
こんにちは、中川です。
最近はちょっとPHPから離れてMonacaを使ったiOSアプリの開発を行なっています。
Monacaでは基本的にHTML+CSS+JSでの開発となりますが、
今回開発中のものはObjective-Cを使ったネイティブの画面をカスタムで 組み込んで利用したりしています。
HTML+CSSであれば画面を作るのは慣れていることもあり比較的簡単なのですが、
UIKitでのネイティブ画面となると微妙なズレの調整などで苦労する場面が多々ありました。
そんな時に役立ったTIPSなどをご紹介したいと思います。
■位置やサイズのログ出力
CGRect, CGSize, CGPoint など、NSStringFromXXXXXで簡単にログ出力することができます。
NSLog(@"frame: %@", NSStringFromCGRect(self.view.frame));
NSLog(@"size: %@", NSStringFromCGSize(self.view.frame.size));
NSLog(@"center: %@", NSStringFromCGPoint(self.view.center));
※出力結果
2012-01-23 15:51:51.125 Sample[23110:f803] frame: {{0, 0}, {320, 411}}
2012-01-23 15:51:51.127 Sample[23110:f803] size: {320, 411}
2012-01-23 15:51:51.128 Sample[23110:f803] center: {160, 205.5}
知ってる人には常識なことかもしれませんが、知るまでは size.width, size.heightなどと個別に出力してました。。。
■Viewのログ出力
UIVIewのframeなどは、上記のようにしなくとも、
NSLog(@"view: %@", view);
これで、
view: <UIView: 0x68aa750; frame = (0 0; 320 411); autoresize = W+H; layer = <CALayer: 0x68aa7d0>>
このように確認することもできます。
■Viewを再帰的にログ出力
指定したViewを再帰的にダンプすることができます。
NSLog(@"%@", [view performSelector:@selector(recursiveDescription)]);
※出力例
<UIView: 0x68ccc40; frame = (0 0; 320 411); autoresize = W+H; layer = <CALayer: 0x68cccc0>>
| <UILabel: 0x68c3cc0; frame = (54 98; 212 43); text = 'First View'; clipsToBounds = YES; opaque = NO; autoresize = W+BM; userInteractionEnabled = NO; layer = <CALayer: 0x684d680>>
| <UITextView: 0x68cce10; frame = (20 181; 280 88); text = 'first view...'; clipsToBounds = YES; opaque = NO; autoresize = W+BM; userInteractionEnabled = NO; layer = <CALayer: 0x68cc200>; contentOffset: {0, 0}>
| | <UITextSelectionView: 0x68cd230;