1

AS3 / Airでアプリを作成していますが、iPhoneとiPadの両方の解像度をターゲットにしたいと考えています。iPhoneとiPadのアスペクト比の違いは理解していますが、現在作成しているアプリのレイアウトとコンテンツは、画面サイズの違いに合わせてわずかに異なります。私は現在、2つのバージョンのアプリをすでにビルドしています。1つはiPhone用、もう1つはiPad用です。すべてのアセットはターゲットプラットフォームを念頭に置いて作成されていますが、今度は2つのアプリを1つにまとめたいと思います。

各画面ファイルの名前をiphone_login、ipad_menu、ipad_settingsなどに変更し、それらすべてを同じビルドに含めることを考えています。次に、起動時に、ユーザーが使用しているデバイスを確認し、iphone_またはipad_を設定し、この時点でも解像度を設定します。

私はiphoneの解像度からipadに行く黒いエッジを持たないことを好むので、私の質問は次のとおりです。

  1. 私のアプローチは、私が望む結果を考慮すると適切なものですか?
  2. 正しいファイル、アセット、解像度を表示するためにユーザーが使用しているデバイスを特定するにはどうすればよいですか?

2セットのアセットと2セットのコードファイルを追加することでアプリのサイズが少なくとも2倍になることは理解していますが、デザインレイアウトとコンテンツの違いを考慮すると、2つのアプリを維持する以外に別の解決策はありません。

ありがとう :)

4

2 に答える 2

0

私は同様の問題の真っ只中にいます。

私の解決策は、ファイル プールに画像を最適な解像度で配置し、アプリの起動時にデバイスに応じて画像を縮小することです。これは、アニメーション化されていないベクター アセットでも実行でき、それらを bitmapData オブジェクトに入れることができます。

もう 1 つのオプションは、必要な最大解像度のファイルを常にメモリにロードし、必要に応じて実行時にそれらをダウンスケールすることです。これは、アイコンなどのアセットをさまざまな場所でさまざまなサイズで使用する場合にうまく機能します。

コードに関しては、データを管理するコード、ロジックを管理するコード、および UI を「ペイント」するコードを分離する方法を見つける必要があります。このようにして、両方のバージョンでほとんどのコードを再利用できますが、UI を「ペイント」するコードのみを変更します。詳細については、MVC パターンを確認してください。

于 2013-03-08T21:40:53.310 に答える
0

どうしたの?iPad と iPhone では、解像度と dpi の組み合わせが異なります。それらを確認して、現在のプラットフォームを特定します。次のようにクラスごとに必要なビューを取得します。

public static const PAGE1:String = "page1";
public static const PAGE2:String = "page2";

private static var PHONE_VIEW_NAME_2_CLASS:Dictionary = new Dictionary();
private static var TABLET_VIEW_NAME_2_CLASS:Dictionary = new Dictionary();

public class ViewProvider 
{
    {
        PHONE_VIEW_NAME_2_CLASS[ViewProvider.PAGE1] = Page1PhoneView;
        PHONE_VIEW_NAME_2_CLASS[ViewProvider.PAGE2] = Page2PhoneView;

        TABLET_VIEW_NAME_2_CLASS[ViewProvider.PAGE1] = Page1TabletView;
        TABLET_VIEW_NAME_2_CLASS[ViewProvider.PAGE2] = Page2TabletView;
    }
    public function ViewProvider()
    {
    }

    public static function isTablet():Boolean {
    ...analyze Capabilities.screenResolutionY, Capabilities.screenResolutionX and Capabilities.screenDPI
    }

    public static function getViewClass(name:String):Class
    {
        return isTablet() ? TABLET_VIEW_NAME_2_CLASS[name] : PHONE_VIEW_NAME_2_CLASS[name];
    }

}

そしてあなたのプログラムで

navigator.pushView(ViewProvider.getViewClass(ViewProvider.PAGE1))

調整されたすべてのパディングと別の位置番号、フォントサイズなどは、実行時の dpi に応じて、同じ方法で乗数を使用して修正されます...

于 2013-03-06T21:20:58.803 に答える