iPad开发前的“准备”

iPad开发前的“准备”_第1张图片
iPad.jpg

简介:

  • 因为公司最近准备开发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 直接做了个实验。在控制台输出了竖屏和横屏的值,
    证明是确实变化了!

iPad横竖屏下[UIScreenmainScreen].bounds的值.png
  • 结论
    场景一:屏幕旋转前后并没有对控件有特殊的需求(比如:宽度变小或者高度变长之类)这样就按照正常情况下开发的约束来!

场景二:屏幕旋转后,比如高度变成之前的一半。效果图如下

iPad开发前的“准备”_第2张图片
旋转.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开发没什么区别了。

你觉得这篇文章对你有帮助就帮忙点个喜欢吧!!!

你可能感兴趣的:(iPad开发前的“准备”)