iPhone是手機隶糕,iPad官硝、iPad Mini是平板電腦
iPhone和iPad開發(fā)的區(qū)別:
1.屏幕的尺寸 \\分辨率
2.UI元素的排布 \\設(shè)計
3.鍵盤
4.API
5.屏幕方向的支持
… …
1.屏幕的尺寸 \分辨率
在iOS開發(fā)中,只需要關(guān)注以下幾種情況:
1)iPhone
3.5 inch:320 x 480 4.0 inch:320 x 568
4.7inch : 375 x 667 5.5 inch : 414 x 736
2)iPad、iPad Mini
9.7 inch芬探、7.9 inch:768 x 1024
2.UI元素的排布 \設(shè)計
因為iPad屏幕比iPhone大讼积,可以容納更多的UI元素,因此排列方式是不一樣的
3.鍵盤
iPad的虛擬鍵盤多了個退出鍵盤的按鈕
4.iPad特有的API
4.1、iPad多了一些特有的類钞螟,
比如:UIPopoverController、UISplitViewController… …
一些類詳細使用方法請看本文最后面谎碍,在后面持續(xù)更新中...
4.2鳞滨、共有API的差異
有些API在iPhone和iPad都能用,但是顯示效果是有差異的蟆淀,比如UIActionSheet(左圖iPhone拯啦,右圖iPad)
5.屏幕方向的支持
1)iPhone支持3個方向(不支持倒屏)
2)iPad支持4個方向
PS:橫豎屏支持
一般情況下,iPhone應(yīng)用就一種屏幕方向熔任,要么豎屏褒链,要么橫屏(游戲);
其次疑苔,蘋果官方建議:iPad應(yīng)用最好同時支持橫屏碱蒙、豎屏兩種方向
6.開發(fā)細節(jié)
1)如何新建一個iPad應(yīng)用程序
2)設(shè)備支持的應(yīng)用程序
iPhone上只能運行iPhone程序
iPad上能夠運行iPhone \ iPad程序
3)開發(fā)過程
iPhone和iPad開發(fā)的流程是一致的
在iPhone開發(fā)中用到的所有知識基本都能用在iPad上
7.Modal使用的區(qū)別
在iPhone開發(fā)中,Modal是一種常見的切換控制器的方式夯巷,
默認是從屏幕底部往上彈出赛惩,直到完全蓋住后面的內(nèi)容為止;
而在iPad開發(fā)中趁餐,Modal的使用頻率也是非常高的.
7.1喷兼、對比iPhone開發(fā),Modal在iPad開發(fā)中多了一些用法
- 呈現(xiàn)樣式
Modal出來的控制器后雷,最終顯示出來的樣子
Modal常見有4種呈現(xiàn)樣式
UIModalPresentationFullScreen :全屏顯示(默認)
UIModalPresentationPageSheet :
寬度:豎屏?xí)r的寬度(768)
高度:當(dāng)前屏幕的高度(填充整個高度)
UIModalPresentationFormSheet :占據(jù)屏幕中間的一小塊
UIModalPresentationCurrentContext :跟隨父控制器的呈現(xiàn)樣式
- 過渡樣式
Modal出來的控制器季惯,是以怎樣的動畫呈現(xiàn)出來
Modal一共4種過渡樣式
UIModalTransitionStyleCoverVertical :從底部往上鉆(默認)
UIModalTransitionStyleFlipHorizontal :三維翻轉(zhuǎn)
UIModalTransitionStyleCrossDissolve :淡入淡出
UIModalTransitionStylePartialCurl :翻頁(只顯示部分,使用前提:呈現(xiàn)樣式必須是UIModalPresentationFullScreen)
8.UIPopoverController的使用
8.1臀突、簡介
UIPopoverController是iPad開發(fā)中常見的一種控制器勉抓,
跟其他控制器不一樣的是,它直接繼承自NSObject候学,并非繼承自UIViewController藕筋;
它只占用部分屏幕空間來呈現(xiàn)信息,而且顯示在屏幕的最前面
UIPopoverController在iOS9 過期梳码,替換為popoverPresentationController隐圾。
8.2、使用步驟
要想顯示一個UIPopoverController掰茶,需要經(jīng)過下列三步驟:
1)設(shè)置內(nèi)容控制器:
由于UIPopoverController直接繼承自NSObject暇藏,不具備可視化的能力,因此UIPopoverController上面的內(nèi)容必須由另外一個繼承自UIViewController的控制器來提供濒蒋,這個控制器稱為“內(nèi)容控制器”
2)設(shè)置內(nèi)容的尺寸:
顯示出來占據(jù)多少屏幕空間
3)設(shè)置顯示的位置:
從哪個地方冒出來
- 設(shè)置內(nèi)容控制器
設(shè)置內(nèi)容控制器有3種方法:
在初始化UIPopoverController的時候傳入一個內(nèi)容控制器
- (id)initWithContentViewController:(UIViewController *)viewController;
@property (nonatomic, retain) UIViewController *contentViewController;
- (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;
以上方法和屬性都是UIPopoverController的
- 設(shè)置內(nèi)容的尺寸
設(shè)置內(nèi)容的尺寸有2種方法:
@property (nonatomic) CGSize popoverContentSize;
- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;
以上方法和屬性都是UIPopoverController的
- 設(shè)置顯示的位置
設(shè)置顯示的位置有2種方法:
第一種:圍繞著一個UIBarButtonItem顯示(箭頭指定那個UIBarButtonItem)
/**
* 彈出UIPopoverController
*
* @param item 圍繞著哪個UIBarButtonItem顯示
* @param arrowDirections 箭頭的方向
* @param animated 是否通過動畫顯示出來
*/
- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
第二種:圍繞著某一塊特定區(qū)域顯示(箭頭指定那塊特定區(qū)域)
/**
* 彈出UIPopoverController
*
* @param rect 指定箭頭所指區(qū)域的矩形框范圍(位置和尺寸)
* @param view rect參數(shù)是以view的左上角為坐標(biāo)原點(0盐碱,0)
* @param arrowDirections 箭頭的方向
* @param animated 是否通過動畫顯示出來
*/
- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
舉個小栗子:
如果想讓箭頭指向某一個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];
8.3、通過內(nèi)容控制器設(shè)置內(nèi)容尺寸
內(nèi)容控制器可以自行設(shè)置自己在popover中顯示的尺寸
在iOS 7之前
@property (nonatomic,readwrite) CGSize contentSizeForViewInPopover;
從iOS 7開始
@property (nonatomic) CGSize preferredContentSize;
以上屬性都是UIViewController的
8.4瓮顽、常用屬性
代理對象
@property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate;
是否可見
@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;
箭頭方向
@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;
關(guān)閉popover(讓popover消失)
- (void)dismissPopoverAnimated:(BOOL)animated;
8.5县好、防止點擊UIPopoverController區(qū)域外消失
默認情況下:
只要UIPopoverController顯示在屏幕上,UIPopoverController背后的所有控件默認是不能跟用戶進行正常交互的;
點擊UIPopoverController區(qū)域外的控件趣倾,UIPopoverController默認會消失
要想點擊UIPopoverController區(qū)域外的控件時不讓UIPopoverController消失聘惦,解決辦法是設(shè)置passthroughViews屬性
@property (nonatomic, copy) NSArray *passthroughViews;
這個屬性是設(shè)置當(dāng)UIPopoverController顯示出來時某饰,哪些控件可以繼續(xù)跟用戶進行正常交互儒恋。這樣的話,點擊區(qū)域外的控件就不會讓UIPopoverController消失了
8.6黔漂、常見報錯
在popover的使用過程中诫尽,經(jīng)常會遇到這個錯誤
-[UIPopoverController dealloc] reached while popover is still visible.
錯誤的大體意思是:popover在仍舊可見的時候被銷毀了(調(diào)用了dealloc)
從錯誤可以得出的結(jié)論:
*當(dāng)popover仍舊可見的時候,不準(zhǔn)銷毀popover對象炬守!
在銷毀popover對象之前牧嫉,一定先讓popover消失(不可見)*
[popover dismissPopoverAnimated:YES];
8.7、如何iPhone中實現(xiàn)popover的效果
UIPopoverController這個類是只能用在iPad中的
要想在iPhone中實現(xiàn)popover效果减途,必須得自定義view酣藻,可以參考
http://code4app.com/ios/Popover-View-in-iPhone/4fa931bd06f6e78d0f000000
http://code4app.com/ios/Popup-Menu/512231ac6803fa9e08000000
9.UISplitViewController的使用
a.MenuViewController
1>masterViewController(主要控制器)
2>負責(zé)展示主要的菜單內(nèi)容
詳細內(nèi)容(重點)
b.DetailViewController
1>detailViewController(詳情控制器)
2>負責(zé)展示詳細內(nèi)容
后續(xù)持續(xù)更新中,如果覺得對你有一丟丟小用鳍置,請點個贊喜歡.