1

我正在 AS3/Air 中构建一个应用程序,我想同时针对 iPhone 和 iPad 分辨率。我了解 iPhone 和 iPad 之间的不同纵横比,但是我目前正在构建的应用程序具有不同的布局和略微不同的内容,以适应不同的屏幕尺寸。我目前已经构建了 2 个版本的应用程序,一个用于 iPhone,另一个用于 iPad。所有资产都是在考虑目标平台的情况下创建的,但现在,我想将这 2 个应用程序合并为一个。

我想我会将每个屏幕文件重命名为 iphone_login、ipad_menu、ipad_settings 等,并将它们全部包含在同一个版本中。然后在启动过程中,检查用户使用的设备并设置 iphone_ 或 ipad_ 并同时设置分辨率。

我不喜欢从 iphone 分辨率到 ipad 的黑边,所以我的问题是:

  1. 考虑到我想要的结果,我的方法是否合适?
  2. 如何确定用户使用什么设备来显示正确的文件、资产和分辨率?

我知道通过添加 2 组资产和 2 组代码文件,应用程序的大小将至少增加一倍,但考虑到设计布局和内容的差异,除了保留 2 个应用程序之外,我没有看到其他解决方案。

谢谢 :)

4

2 回答 2

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 回答
0

我正处于类似问题的中间。

我的解决方案是在文件池中以最佳分辨率保存图像,然后在应用程序启动时根据设备缩小它们。您也可以使用非动画矢量资源执行此操作,并将它们放入 bitmapData 对象。

另一种选择是始终将具有所需最大分辨率文件的资产池加载到内存中,并在需要时在运行时缩小它们。如果您将在不同的地方以不同的大小使用一些资产,例如图标,这很有效。

至于代码,您应该找到一种方法来分离管理数据的代码、管理逻辑的代码和“绘制”UI 的代码。这样,您将能够重用两个版本中的大部分代码,但只更改“绘制” UI 的代码。查看 MVC 模式以获取更多信息。

于 2013-03-08T21:40:53.310 回答