初学iPad开发入门
iPad是一款苹果公司于2010年发布的平板电脑
定位介于苹果的智能手机iPhone和笔记本电脑MacBook产品之间
跟iPhone一样,搭载的是iOS操作系统
iPhone和iPad开发的区别 屏幕的尺寸 \分辨率
UI元素的排布 \设计
键盘
API
屏幕方向的支持
… …
1.iPhone&iPad开发异同
1.1键盘
iPad的虚拟键盘多了个退出键盘的按钮
1.2iPad特有API
iPad多了一些特有的类,比如:
UIPopoverController // 膨松饼
UISplitViewController // 分割线
… …
1.3共有API的差异
有些API在iPhone和iPad都能用,但是显示效果是有差异的,比如UIActionSheet
1.4屏幕方向的支持
1.5横竖屏支持
一般,iPhone应用就一种屏幕方向,要么竖屏,要么横屏(游戏)
其次,苹果官方建议:iPad应用最好同时支持横屏、竖屏两种方向
1.6开发细节
设备支持的应用程序
iPhone上只能运行iPhone程序
iPad上能够运行iPhone \ iPad程序
开发过程
iPhone和iPad开发的流程是一致的
iPhone开发的技术基本都能用在iPad上
2.Modal
在iPhone开发中
Modal是一种常见的切换控制器的方式
默认是从屏幕底部往上弹出,直到完全盖住后面的内容为止
在iPad开发中
Modal的使用频率也非常高
对比iPhone开发,Modal在iPad开发中多了一些用法
呈现样式 : Modal出来的控制器,最终显示出来的样子
Modal常见有4种呈现样式
UIModalPresentationFullScreen :全屏显示(默认)
UIModalPresentationPageSheet
宽度:竖屏时的宽度()
高度:当前屏幕的高度(填充整个高度)
UIModalPresentationFormSheet :占据屏幕中间的一小块
UIModalPresentationCurrentContext :跟随父控制器的呈现样式
过渡样式 : Modal出来的控制器,是以怎样的动画呈现出来
Modal一共4种过渡样式
UIModalTransitionStyleCoverVertical 从底部往上钻(默认)
UIModalTransitionStyleFlipHorizontal 三维翻转
UIModalTransitionStyleCrossDissolve 淡入淡出
UIModalTransitionStylePartialCurl 翻页(只显示部分,使用前提呈现样式必须是UIModalPresentationFullScreen)
3.UIPopoverController
iPad开发中常见的一种控制器(在iPhone上不允许使用)
跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController
它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面
要想显示一个UIPopoverController,需要经过下列步骤:
>设置内容控制器
由于UIPopoverController直接继承自NSObject,不具备可视化的能力
因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,
这个控制器称为“内容控制器” >设置内容的尺寸:显示出来占据多少屏幕空间 >设置显示的位置:从哪个地方冒出来
设置内容控制器有3种方法
在初始化UIPopoverController的时候传入一个内容控制器
- (id)initWithContentViewController:(UIViewController *)viewController; @property (nonatomic, retain) UIViewController *contentViewController; - (void)setContentViewController:(UIViewController *)viewController
animated:(BOOL)animated;
设置内容的尺寸有2种方法
@property (nonatomic) CGSize popoverContentSize; - (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;
设置显示的位置有2种方法
围绕着一个UIBarButtonItem显示(箭头指定那个UIBarButtonItem) - (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item
permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
animated:(BOOL)animated; item 围绕着哪个UIBarButtonItem显示
arrowDirections 箭头的方向
animated 是否通过动画显示出来
围绕着某一块特定区域显示(箭头指定那块特定区域) - (void)presentPopoverFromRect:(CGRect)rect
inView:(UIView *)view
permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections
animated:(BOOL)animated; rect 指定箭头所指区域的矩形框范围(位置和尺寸)
view 参数rect是以view的左上角为坐标原点(,)
设置显示的位置
如果想让箭头指向某一个UIView的做法有2种做法,比如指向一个button
方法1
[popover presentPopoverFromRect:button.bounds
inView:button
permittedArrowDirections:UIPopoverArrowDirectionDown
animated:YES]; 方法2
[popover presentPopoverFromRect:button.frame
inView:button.superview
permittedArrowDirections:UIPopoverArrowDirectionDown
animated:YES];
代理对象
@property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate; 是否可见
@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible; 箭头方向
@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection; 关闭popover(让popover消失)
- (void)dismissPopoverAnimated:(BOOL)animated;
防止点击UIPopoverController区域外消失
默认情况下
只要UIPopoverController显示在屏幕上,UIPopoverController背后的
所有控件默认是不能跟用户进行正常交互的
点击UIPopoverController区域外的控件,UIPopoverController默认会消失 要想点击UIPopoverController区域外的控件时
不让UIPopoverController消失,解决办法是设置passthroughViews属性 @property (nonatomic, copy) NSArray *passthroughViews; 这个属性是设置当UIPopoverController显示出来时
哪些控件可以继续跟用户进行正常交互。这样的话,
点击区域外的控件就不会让UIPopoverController消失了
常见报错
在popover的使用过程中,经常会遇到这个错误
-[UIPopoverController dealloc] reached while popover is still visible.
错误的大体意思是:popover在仍旧可见的时候被销毁了(调用了dealloc)
从错误可以得出的结论
当popover仍旧可见的时候,不准销毁popover对象
在销毁popover对象之前,一定先让popover消失(不可见)
通过内容控制器设置内容尺寸
以下属性都是UIViewController的
内容控制器可以自行设置自己在popover中显示的尺寸
在iOS 7之前
@property (nonatomic,readwrite) CGSize contentSizeForViewInPopover; 从iOS 7开始
@property (nonatomic) CGSize preferredContentSize;
UIPopoverController这个类是只能用在iPad中的
要想在iPhone中实现popover效果,必须得自定义view,可以参考
http://code4app.com/ios/Popover-View-in-iPhone/4fa931bd06f6e78d0f000000
http://code4app.com/ios/Popup-Menu/512231ac6803fa9e08000000
初学iPad开发入门的更多相关文章
- iOS - 初学iPad开发入门
iPad是一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑MacBook产品之间跟iPhone一样,搭载的是iOS操作系统 iPhone和iPad开发的区别 屏幕的 ...
- 微信公众平台开发:Web App开发入门
WebApp与Native App有何区别呢?Native App:1.开发成本非常大.一般使用的开发语言为JAVA.C++.Objective-C.2.更新体验较差.同时也比较麻烦.每一次发布新的版 ...
- Kinect for Windows SDK开发入门(15):进阶指引 下
Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...
- ArcGIS API for Silverlight开发入门
你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击 ...
- 初学者福音——10个最佳APP开发入门在线学习网站
根据Payscale的调查显示,现在的APP开发人员的年薪达到:$66,851.这也是为什么那么多初学的开发都想跻身到APP开发这行业的主要原因之一.每当你打开App Store时候,看着琳琅满目的A ...
- 移动H5开发入门教程:12点webAPP前端开发经验
如果你是一名移动H5前端开发人员,25学堂的小编认为下面的分享的12点webAPP前端开发经验是你必须掌握的基础知识点.算是一篇移动H5开发入门教程吧! 1. viewport:也就是可视区域.对于桌 ...
- IOS开发入门实例
关于如何创建第一个 iOS 应用 本篇“第一个 iOS 应用”教程将向你介绍 iOS 应用开发中的“三个T”: Tools(工具)如何利用 Xcode 创建和管理工程. Technologies(技术 ...
- nginx http模块开发入门
导语 本文对nginx http模块开发需要掌握的一些关键点进行了提炼,同时以开发一个简单的日志模块进行讲解,让nginx的初学者也能看完之后做到心里有谱.本文只是一个用作入门的概述. 目录 背景 主 ...
- openresty 前端开发入门五之Mysql篇
openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...
随机推荐
- Java设计模式 之 命令模式
1 从属模式分类 行为性模式 2 命令模式意图 命令模式可将动作的请求者和动作的执行者对象中解耦. 该模式将一个行为操作发起者的请求封装到对象中,该请求由另外一个对象执行. 将动作 ...
- Cocos2d-x 3.2 项目源代码从Mac打包到安卓教程【转自:http://www.2cto.com/kf/201410/342649.html】
当我们用Xcode写好一个项目的源码之后,如何将它导入到安卓手机中呢?下面我来给大家一步一步讲解: 首先,我们打开终端,cd到Cocos2d-x 3.2文件夹中(注意不是你写的项目文件夹,而是官方项目 ...
- Android解析服务器Json数据实例
Json数据信息如下: { "movies": [ { "movie": "Avengers", "year": 201 ...
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器[转]
转 :http://redstarofsleep.iteye.com/blog/2123752 Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个n ...
- ClearCanvas DICOM 开发系列 一
概述 C#开源的DICOM server.支持影像处理.影像归档.影像管理.影像传输和影像浏览功能.开源代码可学习地方很多. 官方网站:http://www.clearcanvas.ca buildi ...
- Delphi 中的 procedure of object
转载:http://www.cnblogs.com/ywangzi/archive/2012/08/28/2659811.html 总结:TMyEvent = procedure of object; ...
- 解决 QtCreator 3.5(4.0)无法输入中文的问题
解决 QtCreator 3.5.1无法输入中文的问题 [TOC] 环境是ubuntu 15.10 ubuntu软件源中下载安装的fctix-libs-qt5现在没有用,版本太旧了. 自己下载fcti ...
- class.equals
public boolean equals(Object obj) 1.自身和自身应该是equals的. X.equals(x) return ture2.如果A等于B, 那么B也就等于A . X.e ...
- php preg_match($p, $str, $match)方法简介
方法作用:匹配指定的正则表达式并将结果放在$match数组中 代码示例: $p = '/name:([\\ws]+)/'; $str = "name:steven jobs"; p ...
- poj 2251
http://poj.org/problem?id=2251 一道简单的BFS,只不过是二维数组,变三维数组,也就在原来基础上加了两个方向. 题意就是从S走到E,#不能走. #include < ...