iPhone 移植到 iPad:
来源:http://www.wapera.cn/ipadkaifa/71354.html
iPhone移植到iPad:
方法一修改设备目标设置(普通模式:一套代码及XIB界面文件,代码分if和else来分别处理多种设备)
默认情况下,所有的iPhone程序都会运行在他们原始的屏幕大小320x480(非全屏状态),如果你想让你的程序运行在iPad上,且为全屏状态,你需要修改项目设置你们的TargetedDeviceFamily选为iPhone/iPad(这种模式使你的程序可以自动检测运行的设备类型,并使你的程序全屏显示)。
将iPhone运行的iOS版本切换到iPad运行的版本。(当前iPhoneiOS系统版本为4.1,iPad为3.2)。
修改目标设备族(Build里面的TargetedDeviceFamily选为iPhone/iPad)。
现在可以使你的程序运行在iPad上了。但是,你会看到你的界面(UI)和iPhone下面完全一样,这不是我们需要的。所以,重新布局你的Views是程序员的责任,即重定位(reposition)Views。
首先,我们需要手工检测运行的设备类型。(使用预编译命令)
#if(__IPHONE_OS_VERSION_MAX_ALLOWED>=30200)
NSString*str;
if(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad){
//iPad版本代码;
}
else
//iPhone/iPodtouch版本代码;
#endif
或者
#defineisPad(UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)。UI_USER_INTERFACE_IDIOM()方法返回值UIUserInterfaceIdiomPhone或UIUserInterfaceIdiomPad。
▪方法二建立通用类型程序(两套代码及XIB界面文件,两套代码及界面互不相干)
上一种方法的缺点是,你必须自己写两个版本(iPhone/iPod和iPad)的代码来适配不同的平台,同时要动态修改UI布局(及控件尺寸等),是挑战,但也很痛苦。所以,Apple建议你创建“Universal”,即通用型的应用。这样的应用可以在iPhone和iPad下面运行。这需要为各个平台建立相应的.h,.m和.xib文件。后台业务代码自然要写在相应版本的.h,.m文件里面。
升级项目的设备目标到iPad。实质上,这里Xcode把项目的TargetedDeviceFamily设置修改成了iPhone/iPad。Xcode会创建MainWindow.xib文件的副本,并命名为MainWindow-iPad.xib。这时,这两个文件都包含“projectname”ViewController这个ViewController。如下图:
添加新的对应iPad版本的xib文件到Resource-iPad文件夹。命名规范:“iPad‘功能’ViewController.xib”(或者‘功能’ViewController-iPad.xib”),生成.h,.m,.xib文件。并将这些iPad版本的xxViewController连接到MainWindow-iPad.xib(和正常的iPhone版本一样)。
这样,选择不同的模拟器(Simulator)就可以看到同一套代码处理过的相应版本的界面效果。
注:首先选择UpgradetheDeviceTargetForiPad,这里Xcode把项目的TargetedDeviceFamily设置修改成了iPhone/iPad。MainWindow.xib和MainWindow-iPad.xib作为两个版本的入口,其他相应版本的ViewController连接到自己的MainWindow(-iPad).xib文件即可。
看到的效果是:
▪方法三维护两套UI库(一套代码及两套XIB界面文件,两套界面公用一套代码)
这种情况下,你会得到两个可执行体(executables),一个foriPhone/iPodtouch,一个foriPad。
建立iPhone的应用,升级到iPad兼容。方法同二,不同的是,方法二选的是OneUniversalapplication,而这里选的是Twodevice-specificapplications。
这样的话,与方法二建立相应的-iPad版本文件不同的是,这里是将iPhone版本的文件直接拷贝进Resource-iPad文件夹,文件名称一样。代码只需要一份,只不过需要把Resource和Resource-iPad文件夹下的xxViewController的File'sOwner都设置为Classes文件夹里面的同一个xxViewController类就可以了,其他界面UI元素设置连接到File'sOwner。同时,会产生两个版本的可执行体(executables),“projectname”.app和“projectname”-Upgraded.app。
看到的效果是:同一套代码处理过的相同结果的界面。
总结:由于实际项目后台生成控件,尤其是TableView会比较多,为了适应iPhone和iPad,可以考虑用第三种方法,一套代码,两套XIB界面。后台加载时,用:
if(isiPad){
UITableViewController*tableViewController=[[UITableViewControlleralloc]initWithNibName:@"iPadxxViewController"bundle:nil];
}
else{
UITableViewController*tableViewController=[[UITableViewControlleralloc]initWithNibName:@"iPhonexxViewController"bundle:nil];
}
即可。iPadxxViewController和iPhonexxViewController分别代表相应的iPadxxViewController.xib和iPhonexxViewController.xib文件。
iPhone 移植到 iPad:的更多相关文章
- [转]在cocos2d-x中让一个项目适配iphone、iphone retina、ipad、ipad retina四种分辨率
http://cankeyyin.blog.163.com/blog/static/12336178320124149391202/ 原理:将iphone的hd图片给ipad用,即: 使用原iphon ...
- RadioStream应用源码完整版(iphone版和ipad版)
RadioStream应用源码完整版(iphone版和ipad版),这个项目是从那个ios教程网分析过了的,也是一个不错的国外音乐应用的,支持iphone版和ipad版. <ignore_js_ ...
- “设计之变”--从iPhone应用到iPad应用
在做APP的iPad版本设计时,我们常常需要考虑:如何在延续iPhone版本设计特色和优点同时,充分利用iPad的特性更好地进行设计.本文从iPad和iPhone的差异性入手,试图总结这一设计过程中需 ...
- [转]Apple iPod, iPhone (2g, 3g), iPad Dock connector pinout
Pin Signal Description Apple pin numbering* 1 GND Ground (-), internally connected with Pin 2 on iPo ...
- iphone程序适配ipad可以用下面的宏进行尺寸改写
//判断是否为iPad #define ISIPAD [[[UIDevice currentDevice].model substringToIndex:4] isEqualToString:@&qu ...
- iOS开发UI篇—iPad和iPhone开发的比较
一.iPad简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定位介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2.iPad的市场情况 ...
- iPhone / iPad UI界面设计与图标设计的尺寸设计规范+安卓+网页
①iPhone的设计尺寸 iPhone界面尺寸: 设备 分辨率 状态栏高度 导航栏高度 标签栏(工具栏)高度 iPhone6 plus设计版 1242 × 2208 60px 132px 146px ...
- iPhone与iPad在开发上的区别
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 【转】iOS开发UI篇—iPad和iPhone开发的比较
原文网址:http://www.cnblogs.com/wendingding/p/3918007.html iOS开发UI篇—iPad和iPhone开发的比较 一.iPad简介 1.什么是iPad ...
随机推荐
- protobuf使用
一.protobuf环境搭建 Github 地址: https://github.com/protocolbuffers/protobuf 然后进入下载页 https://github.com/pro ...
- c 越界
int main(int argc, char* argv[]){ int i = 0; int arr[3] = {0}; for(; i<=3; i++){ arr[i] = 0; prin ...
- mysql-connector-java(6.0以上)的时差问题
一.背景 通过mybatis日志观察插入数据库的时间为当前时间,但是打开数据库表发现时间滞后了8个小时. 二.推论及解决 很容易猜到这是时区的问题. 三.最后找到的问题点如下: jdbc:mysql: ...
- 关于H5项目开发中TS(或JS)文件按照顺序编译成一个文件的记录
由于js的执行特性,多个js文件合成一个文件或者进行多个js文件加载时,时需要按照指定的顺序进行的,否则会出现报错的情况. 我们看一下目前几个主流H5引擎的做法. 白鹭的做法 当前版本的做法 在tsc ...
- 不规则形状的Ifc构件顶点坐标获取
不规则形状的Ifc构件顶点坐标获取 今天有人问我,ifc构件的顶点坐标怎么获取,自己前年的时候写过类似的程序,但有点记不清了,最近一直用C++解析ifc,慎重起见,还是重新再写一次,java版本的获取 ...
- 64位CreateProcess逆向:(二)0环下参数的整合即创建进程的整体流程
转载:https://bbs.pediy.com/thread-207683.htm 点击下面进入总目录: 64位Windows创建64位进程逆向分析(总目录) 在上一篇文章中,我们介绍了Create ...
- 接口测试01- Jmeter-线程进程-环境变量
1.1 概念 JMeter 是 Apache 组织使用 Java 开发的一款测试工具 ,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文件.Java ...
- springboot整合mybaties
在pom.xml中添加相关依赖. <!--MyBatis分页插件--> <dependency> <groupId>com.github.pagehelper< ...
- 【linux基础】ubuntu16.04 安装后,屏幕分辨率过低且不可调节
前言 安装CUDA和NVIDIA驱动之后,屏幕分辨率过低且不可调节,尝试了几种方法都没成功解决,特此讲解决方法记录下来. 解决过程 注销进入登录界面,按ctrl+alt+F1进入命令行终端,输入账户名 ...
- [LeetCode] 774. Minimize Max Distance to Gas Station 最小化加油站间的最大距离
On a horizontal number line, we have gas stations at positions stations[0], stations[1], ..., statio ...