簡介:
- 因為公司最近準備開發(fā)iPad版本的項目,之前沒開發(fā)過,所以找了一些資料,就以下幾點來說下開發(fā)iPad的項目要知道些什么!!!(iPad就類似于放大過后的iPhone)
屏幕尺寸
- iPad一共有3種屏幕
- iPad Pro 12.9英寸 分辨率為 2732 * 2048
- iPad Air 9.7英寸 分辨率為 2048 * 1536
- iPad mini 7.9英寸 分辨率為 1024 * 768 (第二代之后的都是Retina 顯示屏)
- 因為其他2種分辨率都是基于 1024*768 的基礎上 @2x和@3x。(iPad Pro 的分辨率就類似于iPhone 6P的分辨率 ,這樣子降低分辨率的原因據說是因為為了功耗考慮 ) 所以開發(fā)的時候,只需要根據需求來決定要不要適配所有屏幕了。
橫豎屏
-
判斷橫豎屏的方法:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
這些都可以知道當前的屏幕狀態(tài)的,但是蘋果之后給廢棄掉了
方法- 在iOS8 之后被廢棄掉了
方法二 在iOS6 之后被廢棄掉了
方法三 在iOS8 之后被廢棄掉了
因為在iOS8之前
[UIScreenmainScreen].bounds
[UIScreen mainScreen].applicationFrame
這2個的值都是固定的。但是在iOS8中。這2個的值會隨屏幕的旋轉而發(fā)生變化
因為我現在用的Xcode8 直接做了個實驗。在控制臺輸出了豎屏和橫屏的值,
證明是確實變化了!
- 結論
場景一:屏幕旋轉前后并沒有對控件有特殊的需求(比如:寬度變小或者高度變長之類)這樣就按照正常情況下開發(fā)的約束來!
場景二:屏幕旋轉后,比如高度變成之前的一半。效果圖如下
主要代碼是這樣的:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) { // 橫屏
[_label mas_updateConstraints:^(MASConstraintMaker *make) {
self.title = @"屏幕旋轉 橫屏";
make.top.equalTo(self.view).offset(129);
make.left.equalTo(self.view).offset(30);
make.right.equalTo(self.view).offset(-30);
make.height.mas_equalTo(200);
}];
} else {
self.title = @"屏幕旋轉 豎屏";
[_label mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.view).offset(129);
make.left.equalTo(self.view).offset(30);
make.right.equalTo(self.view).offset(-30);
make.height.mas_equalTo(400);
}];
}
}
插個題外話:為什么在Masonry中使用self 不會造成循環(huán)引用?
Masonry的源碼:
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
self.translatesAutoresizingMaskIntoConstraints = NO;
MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
block(constraintMaker);
return [constraintMaker install];
}
它僅僅是block(constrainMaker)。而不是self.block(constrainMaker)
并不是 block 就一定會造成循環(huán)引用,是不是循環(huán)引用要看是不是相互持有強引用。
block 里用到了self,那 block 會保持一個 self 的引用,
但是 self 并沒有直接或者間接持有 block,所以不會造成循環(huán)引用。
分屏
有個哥們的文章寫的不錯,給個傳送門看看吧。 點我傳送
總結快速開發(fā)iPad項目的幾點因素
對項目的熟悉。
布局要統一,方便需求變化的時候易調整。
分屏:在橫屏模式下,界面需要分屏顯示,左邊視圖為主視圖,右邊視圖為詳細視圖,此時兩者為并列關系。而在豎屏模式下,兩者都在導航上為上下關系,通過pop或present方式彈出下一個視圖。
屏幕旋轉:根據需求選擇適當的方式來布局。
其他的和iPhone開發(fā)沒什么區(qū)別了。
你覺得這篇文章對你有幫助就幫忙點個喜歡吧!!!