美文网首页iPad
iPad开发前的“准备”

iPad开发前的“准备”

作者: 大王叫我来巡山_Cong | 来源:发表于2016-11-12 11:02 被阅读219次
    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
    • 结论
      场景一:屏幕旋转前后并没有对控件有特殊的需求(比如:宽度变小或者高度变长之类)这样就按照正常情况下开发的约束来!

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

    旋转.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开发没什么区别了。

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

    相关文章

      网友评论

      • 蜕变163:所有iPad竖屏分辨率都是768*1024的比例嘛?
        大王叫我来巡山_Cong:@蜕变163 其实和正常的iPhone 没区别, 屏幕的宽高 乘以 一个系数 (当前屏幕的宽/高 除以 设计图上的宽/高)。 就和正常情况下开发一样。
        蜕变163:@大王叫我来巡山_Cong 那应该怎么做iPad的适配呢?

      本文标题:iPad开发前的“准备”

      本文链接:https://www.haomeiwen.com/subject/inbfpttx.html