我正在AS3 / Air中构建应用程序,我想同时针对iPhone和iPad分辨率。我理解iPhone和iPad之间的不同宽高比,但我目前正在构建的应用程序具有不同的布局和略有不同的内容,以适应不同的屏幕尺寸。我目前已经构建了2个应用程序版本,一个用于iPhone,另一个用于iPad。所有资产都是在考虑目标平台的情况下创建的,但现在,我想将这2个应用程序合并为一个。
我想我会将每个屏幕文件重命名为iphone_login,ipad_menu,ipad_settings等,并将它们全部包含在同一个版本中。然后在启动期间,检查用户所在的设备并设置iphone_或ipad_,并同时设置分辨率。
我不希望黑色边缘从iphone分辨率变为ipad,所以我的问题是:
据我所知,通过添加2组资源和2组代码文件,应用程序大小将增加至少两倍,但考虑到设计布局和内容的差异,除了保留2个应用程序外,我没有看到其他解决方案。
谢谢:)
答案 0 :(得分: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通过类似的方式......
答案 1 :(得分:0)
我正处于类似问题的中间。
我的解决方案是让文件池中的图像处于最佳分辨率,然后根据设备启动时的设备缩小它们。您也可以使用非动画矢量资源执行此操作,并将它们放入bitmapData对象。
另一种选择是始终使资产池中包含内存中所需的最大分辨率的文件,并在需要时在运行时缩小它们。如果您将在不同位置使用不同大小的资产(例如图标),则此方法很有效。
对于代码,您应该找到一种方法来分隔管理数据的代码,管理逻辑的代码以及“绘制”UI的代码。这样,您将能够重用两个版本中的大多数代码,但只能更改“绘制”UI的代码。检查MVC模式以获取更多信息。