iPad开发前的“准备”
简介:
- 因为公司最近准备开发iPad版本的项目,之前没开发过,所以找了一些资料,就以下几点来说下开发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的分辨率 ,这样子降低分辨率的原因据说是因为为了功耗考虑 ) 所以开发的时候,只需要根据需求来决定要不要适配所有屏幕了。
横竖屏
-
判断横竖屏的方法:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
这些都可以知道当前的屏幕状态的,但是苹果之后给废弃掉了
方法- 在iOS8 之后被废弃掉了
方法二 在iOS6 之后被废弃掉了
方法三 在iOS8 之后被废弃掉了
-
因为在iOS8之前
[UIScreenmainScreen].bounds
[UIScreen mainScreen].applicationFrame
这2个的值都是固定的。 -
但是在iOS8中。这2个的值会随屏幕的旋转而发生变化
因为我现在用的Xcode8 直接做了个实验。在控制台输出了竖屏和横屏的值,
证明是确实变化了!
- 结论
场景一:屏幕旋转前后并没有对控件有特殊的需求(比如:宽度变小或者高度变长之类)这样就按照正常情况下开发的约束来!
场景二:屏幕旋转后,比如高度变成之前的一半。效果图如下
旋转.gif主要代码是这样的:
- (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 不会造成循环引用?
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 就一定会造成循环引用,是不是循环引用要看是不是相互持有强引用。
block 里用到了self,那 block 会保持一个 self 的引用,
但是 self 并没有直接或者间接持有 block,所以不会造成循环引用。
分屏
有个哥们的文章写的不错,给个传送门看看吧。 点我传送
总结快速开发iPad项目的几点因素
-
对项目的熟悉。
-
布局要统一,方便需求变化的时候易调整。
-
分屏:在横屏模式下,界面需要分屏显示,左边视图为主视图,右边视图为详细视图,此时两者为并列关系。而在竖屏模式下,两者都在导航上为上下关系,通过pop或present方式弹出下一个视图。
-
屏幕旋转:根据需求选择适当的方式来布局。
-
其他的和iPhone开发没什么区别了。
你觉得这篇文章对你有帮助就帮忙点个喜欢吧!!!