Viewを作るJavaScriptが実行される時の流れを追ってみたモジュールの作り方が何となく分かったので、さっそくカスタムViewを書き始めましたが、幾つか分からない点があったので記録しておきます。A,Bがあって、AからBにドラッグドロップできるというものです。TableViewを作って張りたいのですが、どこにその処理を書けば良いのか分かりません。Objective-CでiPhoneアプリを作る時はIBでGUIを作って、awakeFromNibとかViewControllerのviewDidLoadあたりで調整すると思うのですが、IBを使わないTitaniumモジュールの場合どうすれば良いのか分からないのです。処理の流れを把握しておいた方が良さそうなのでソースコードを追ってみることにしました。出発点のJSのコードは以下のようになるかと思います。このFooViewが作られる過程を把握して、適切な場所でFooViewのサイズに合わせてTableViewを張りたいという事です。'auto'});win.add(foo);まずJSのコードが評価されるまでのフローはコチラの記事が分かりやすかったです。合わせて参照ください。今は早い話、上の記事の続きが知りたいのですが、記事内でも書かれている通りJSのエンジン部がプリコンパイルされていて、追うのが面倒です。そこでモジュールのテストを走らせる時に生成されるXcodeプロジェクトを利用しましょう。runコマンドが出力するログからプロジェクトのパスを確認できます。/var/folder下のパスです。下記の場合だと、/var/folders/8c/8lmltdzx4tbd4w_mwhy_j6b00000gn/T/mfxZqOlti/firstmod/build/iphoneにxcodeprojが生成されています。/var/folders/8c/8lmltdzx4tbd4w_mwhy_j6b00000gn/T/mfxZqOlti/firstmod/build/iphone/Classes/AccelerometerModule.h...適当にブレークポイントを張りながら調べてみるとKrollMethod::callというメソッドが見つかりました。JS側に公開されているAPIを叩くとこのメソッドが呼ばれて、対応するコードが実行されます。createFooViewだと下記部分が実行されます。selectorからIMPを取得して実行しています。createから始まるメソッドはTiModuleのcreateProxy:forName:context:にマッピングされています。result;}...}そして以下がcreateProxy:forName:context:です。何をしているかというとforNameで与えられたクラス名から、プレフィックスにモジュール名、サフィックスに”Proxy”をつけて、実際のクラス名を取得、続いて_initWithPagecontextを呼び出しています。モジュールを作る際の命名規則はココで使われています。ハードコードされてるのがわかりまうす。どうりでモジュール中で使うクラス名が間違っていると動かないわけですね。autorelease];}続いて_initWithPageContext:context:argsです。_initWithPropertiesもついでに見ておきましょう。createFooView等で渡されたハッシュはここでPropertyに変換されます。ココで分かるのはcreateFooViewされた時に最初に作られるのはViewでは無くてViewProxyだと言う事です。Viewはいつ作られるのでしょうか。finishLayout:nil];}_initWithPropertiesでstartLayout、finishLayoutというそれっぽいメソッドが呼ばれています。ところが中を見てみるとフラグを上げ下ろししているだけで、Viewの作成等は行っていません。面倒なのでprocessTempProperties以下は省略します。Viewが作られていませんが処理が返ってしまいます。NO;}というわけでcreateFooViewでは実際のViewが作られない事が分かったわけですが、Viewの初期化フローが知りたいので引き続き追っていきます。作成したFooViewのinitにブレークポイントを張ってみると(最初からそうしろよという話はあります。)、コールスタックからTiViewProxyのaddからlayoutChildを経由して呼ばれている事がわかりした。下記にlayoutChildを適当に抜粋してコメントを追加しています。layoutChildren:optimize];}さらにrelayoutの中を見てみます。sizeとcenterを設定しています。ここでようやくviewのframeが取得できる状態になったわけですね。postlayoutイベントが発火しているのがわかります。早いタイミングとしてはpostlayoutイベント受けてframeを使う処理ができます。先ほどのlayoutChild中にinsertSubviewが呼ばれているので、この処理が抜けた後にlayoutSubviewsが走ります。TiUIViewのサブクラス内でlayoutSubviewsをオーバーライドして処理するのが普通っぽい気がしますね。relayout.",self);}#endif}まとめ処理を追いたい場合はKrollMethod::callで張っとけばいいよTiUIViewのサブクラス内でレイアウトする場合はlayoutSubviewsTiUIViewのサブクラスの準備が整ったらpostlayoutイベントが呼ばれる以上、長々と書きましたが別に何でも無い結果になりましたね。23:35:42はじめまして、コチラの記事を書いた人です。その記事を書いた時は、続きを書いてもらえる人がいるなんて思ってもいなかったので大変嬉しいです。ありがとうございます。2:49:29ダニーさんコチラこそありがとうございます。ダニーさんの記事のおかげで処理を追って見ようと言う気になりました。