2012年3月2日金曜日

現状でのモバイルFlash開発は、残念ながら「Painである」と言わざるを得ない

例えば、モバイルFlashではListアイテムのドラッグ&ドロップはサポートされない_| ̄|○

まず、ドキュメントにそう書いてある。

spark.components.List - Adobe® Flash® Platform 用 ActionScript® 3.0 リファレンスガイド

・・・
dragEnabled プロパティ
・・・
interactionMode が touch に設定されているモバイルデバイスでは、ドラッグ&ドロップがサポートされていません。
・・・

マジかよ?と思って、このようにやってみた。

/**
 * アカウント並べ替えボタンクリック時
 * 
 */
protected function onClickBtnOrganizeAccount():void {
    trace("onClickBtnOrganizeAccount() w=" + listAccount.width + " h=" + listAccount.height);
    currentState = "organize";
    listAccount.setStyle("interactionMode", "mouse");
    listAccount.dragEnabled = true;
    listAccount.dragMoveEnabled = true;
    listAccount.dropEnabled = true;
    listAccount.itemRenderer = new ClassFactory(AccountSortItemRenderer);
}


/**
 * アカウント並べ替え終了ボタンクリック時
 * 
 */
protected function onClickBtnOrganizeDone():void {
    trace("onClickBtnOrganizeDone() w=" + listAccount.width + " h=" + listAccount.height);
    currentState = "default";
    listAccount.setStyle("interactionMode", "touch");
    listAccount.dragEnabled = false;
    listAccount.dragMoveEnabled = false;
    listAccount.dropEnabled = false;
    listAccount.itemRenderer = new ClassFactory(AccountItemRenderer);
}


このようにすれば、リストアイテムのドラッグ&ドロップはモバイルでもできる。しかし、痛い問題が。

interractionModeがtouchの時の右端の表示はこう。


mouseの時はこう。


つまり、interractionModeをmouseにすると右端にスクロールバーが出るべき数ピクセルが確保されてしまうのでカッコ悪いことに。

これには百歩譲って目をつぶるとしても、マウスカーソルが出るのは許せん!

上のキャプチャはMac上で動作させたものだが、iOSでもAndroidでも同様にマウスカーソルが表示されることを確認した。

要するに、アイテムのソートをサポートしなければならないリストとしては、spark.components.Listは使い物にならない。となると、自分で実装するほかないだろう・・・


現状のモバイルFlashは、こういった残念なことがまだ色々とあるなと痛感している。

例えば、ラジオボタンはなぜか当たり判定が大きすぎて使い物にならず、結局自分で作ってしまった。

また、モバイルFlashは遅くてViewの切り替えに時間がかかりすぎるので、Viewの切り替えが完了してからコンポーネントを追加するという、コンポーネントの遅延作成処理をする必要もあった。

さらには、コンポーネントの話ではないけれど、registerClassAlias()が使えないっぽいこととかも・・・
琴線探査: モバイルFlashではregisterClassAlias()が使えない?

最悪なのは、iOSへアプリをデプロイするのが手動であること_| ̄|○


こうなるとやはり・・・結局、最高のパフォーマンスを発揮でき、まともなコンポーネントや開発環境が揃っているネイティブ言語で開発したほうが、変なところで苦労する時間を減らせるのではないか?結局その方が早いのでは?と思ってしまう。

今年中にはモバイルFlashもかなり速くなりそうだけど、十分なパフォーマンを確保できるようになるだろうか。

琴線探査: モバイルのFlashは速度的にまだまだだけど、今年中にもある程度速くなりそうか?

また、今後のSDKのバージョンアップでコンポーネントの完成度も上がっていくだろうか。


残念ながら、現状でのモバイルFlash開発は「Painである」と言わざるを得ないと感じている。

やはり、マルチプラットフォームにおけるソフトウェア開発に対する「Pain Killer」は永遠に処方されないのか。



I DO want ペイン!ぺいんン!キラー!キラーァ!

もし1年後もこの状況が改善されていなければ、恐らくFlashプラットフォームは徐々に力を失っていくのだろうなとも感じている。

しかし、こういった問題が解決されれば、Flashのモバイルアプリ開発効率は相当なものだ。

1年後には是非、そういう状況になっていることを切に願いたい。