iOS&Xcode各版本差异(一) --iOS6与iOS7

来源:互联网 发布:linux 环境变量unset 编辑:程序博客网 时间:2024/06/05 09:29

iOS6与iOS7 && Xcode4与Xcode5

想把iOS各个版本和Xcode各版本差异梳理一下,思来想去,还会从iOS7开始吧,这故事可是要从2013年说起的。

      一、先说iOS6和iOS7

话说,早在2013年WWDC,发布Xcode5,同时宣布9月18日正式发布iOS7正式版,iOS7与iOS6的差别实在是太大,即便年代久远,但是从拟物化到扁平化的跨越还是历历在目。

接下来简单纯文字说下区别,至于iOS6和iOS7的界面的区别,百度一搜还有一大推。而且下面的内容也是我在网上整理的。

简单点来说,就是换了新的图形界面,和更人性化的设置*

以下是详解:

iOS 7在上一代iOS操作系统的基础上有了很大的改进。它不仅采用了全新的应用图标,还重新设计了内置应用、锁屏界面以及通知中心等。iOS 7还采用了AirDrop作为分享的方式之一并改进了多任务能力。iOS 7将支持iPhone 4以上设备,iPad2以上设备,iPad mini以及iPod Touch5以上的设备。

主要更新

  • 1、自主选择默认地图应用
    苹果在iOS 6中移除了谷歌地图,使用了自家研发的苹果地图。不得不说,这款自带的地图应用可以说烂到了一定的程度,自发布之后便问题不断。正因如此,苹果应该允许用户在iPhone、iPod Touch和iPad上自主选择默认的地图应用。一旦消费者能在iOS 7自带苹果地图和谷歌地图等竞争产品之间自由选择,那么这必然会使得iOS系统变得更加人性化,说不定也会推动苹果地图更快更好的发展完善。

  • 2、原生应用更加灵活
    苹果在自己的产品中预装了很多原生应用(比如Stocks、Weather和Passbook),但他们应该允许用户自由地对这些应用进行卸载。如此一来,用户iOS设备的主屏幕就会变得更加简洁。

  • 3、去除歌曲中的DRM(数字版权管理)编码,方便用户编辑
    从2009年开始,用户在iTunes中购买的音乐就不再受苹果FairPlay数字版权管理(DRM)系统的保护。不过遗憾的是,在此之前购买的音乐还是带有苹果的DRM保护编码。要想解决这个问题,用户只能通过昂贵的iTunes Plus项目付费对这些文件进行升级。这就意味着在解除DRM编码保护前,2009年前iTunes中购买的音乐是不能在第三方应用(比如Audio Xciter)中播放的(除非用户先将其刻入CD,然后再导入iTunes)。
    在iOS 7中,苹果应该彻底移除DRM编码保护,从而使得用户不需要重复购买音乐或者被迫刻录CD。也许将此功能作为iTunes Match订阅服务的一部分最合情合理。

  • 4、增加应用程序试用模式
    苹果应用商店已经开张五年了,但是用户依旧不能采用先试用再购买的消费模式。许多开发团队纷纷发布“精简版”应用来规避这一限制,但这显然还不够。苹果应该允许用户对应用进行试用,只不过在试用版中对使用时间/功能内容进行限制。这样,用户在掏钱购买前就能更好地了解应用的整体情况,开发人员也可以彻底摆脱“精简版”的折磨。

  • 5、提供更多的图标和主题
    一些越狱工具已经允许用户对屏幕图标和主题进行更换。苹果应该将其作为iOS 7的常规功能,而不是让用户去破解设备才能实现。
    除了扁平的按钮和现代化的外观外,iOS 7 还需要为用户提供一些灵活性。我认为应该提供一些定制选项或是主题,让用户可以自由切换。例如,可以让用户自主选择不同的颜色,以便与好友的iPhone屏幕有所差异。当然,外观调整只是表面功夫,但即使没有主题,采用新的界面元素同样可以起到不俗的效果。

  • 6、更多功能与Siri集成
    Siri在不断的发展,其功能越发完善。尽管如此,这款语音助手应用距离完美还是缺乏一些关键功能。要改变这一尴尬现状,最好的办法就是更好的同网络集成。

  • 7、更加智能的多任务处理
    在iOS 7上,所有打开的apps在后台都以截屏的形式显示,更为直观快捷(有点类似wp)但iOS7和iOS6一样都不具备正真意义上的后台,后台运行只对特定app有效,大多数app最小化后是暂停运行的。iOS 7能够在尽量节省电量的情况下,对各种应用进行智能化管理。这也是iphone续航能力较强的原因。

  • 8、用户在通知中心里可以切换任务
    SBSettings的黑客们已经为越狱用户提供这一功能,这可以使得任务进程变得更简单、更迅速。既然如此,iOS 7当然应该加入这一功能。

  • 9、全新的锁屏界面设计,新的通知中心
    关于iOS最近出现的一个特性就是通知气泡,虽然很实用,但是某些用户使用起来却是不习惯,感觉处理通知的过程十分麻烦。虽然苹果在锁屏设计方面只是进行小幅修改,但是这个概念设计却是让锁屏以及某些原生的应用改头换面。

  • 10、多显示幕用户能全屏打开应用
    配置多个显示器的用户将终于能够在特定显示器上全屏打开应用。苹果软件工程高级副总裁克雷格?费德里西(Craig Federighi)在与用户邮件交流时称,苹果将会解决这个问题。

    二.IOS6和IOS7的屏幕适配问题


    自从IOS7出来以后,以前写在IOS6上或者更低版本的程序,跑在IOS7的模拟器上就会出现一些问题。最大的问题就是,所有的UI空间都会统一向上移动20个点(如果空间的y值为0,就会被StatusBar挡住),造成原来在IOS6下精心布局的界面在IOS7下特别难看。

     

    IOS7和IOS6最大的区别,除了扁平化设计以外,就是全屏App。在IOS7的情况下,状态栏也是控制器的View的一部分。坐标点的y值,不再是从StatusBar的底部开始,而是从StatusBar的顶部开始。我们可以很明显地感受到,以前在IOS6的情况下,我们用 [UIApplication ShareApplication].StatusBarStyle 来设置状态栏的样式。但是用IOS7的情况下,该方法是无效的。相反,设置StatusBar的样式的方法,被Apple放在Controller里面了,成为了控制器方法,不在交给UIApplication来处理。

     

    为了解决IOS6和IOS7的适配问题,我针对不同情况列举了一些方法,供广大开发者参考。

    一、没有包装任何 导航控制器 或者 UITabBarController

    1.控制器的viewUIScrollView\UITableView\UICollectionView时(控制器是UITableViewController的时候)

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        

    #ifdef __IPHONE_7_0

        if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {

            self.tableView.contentInset = UIEdgeInsetsMake(20000);

        }

    #endif

    }

     

    2.控制器的view是普通的UIView,非UIScrollView

    #ifdef __IPHONE_7_0

    - (void)viewDidLayoutSubviews

    {

        // iOS7 && 没有包装导航控制器

        if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0 && self.navigationController == nil) {

            CGFloat top = [self.topLayoutGuide length];

            

            // 是否能滚动

            if ([self.view isKindOfClass:[UIScrollView class]]) {

                UIScrollView *scroll = (UIScrollView *)self.view;

                scroll.contentInset = UIEdgeInsetsMake(top, scroll.contentInset.left, scroll.contentInset.bottom, scroll.contentInset.right);

            } else {

                CGRect bounds = self.view.bounds;

                bounds.origin.y =  - top;

                self.view.bounds = bounds;

            }

        }

    }

    #endif

     

    二、包装有导航控制器的情况

    1控制器的view不是UIScrollView

    #ifdef __IPHONE_7_0

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {

        self.edgesForExtendedLayout = UIRectEdgeNone;

    }

    #endif

     

    2控制器的viewUIScrollView

    不需要写额外的代码适配

     

    三、其他情况(上述情况不用死机,只要掌握以下几点规律)

    1.想让view的内容往下挪动

    1> UIView设置boundsy

    2> UIScrollView设置contentInsettop

     

    2.防止子控制器的view被导航栏或者tabbar遮住

    self.edgesForExtendedLayout = UIRectEdgeNone;

     

    四、多控制器嵌套处理

    1.当多重控制器嵌套的时候,最合理的方案是:UITabBarController内部嵌套UINavigationController

    2.UITableViewController的直接父控制器是UINavigationController时,不需要编写任何适配代码

    3.其他非UITableViewController需要加上适配代码

    #ifdef __IPHONE_7_0

    if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {

        self.edgesForExtendedLayout = UIRectEdgeNone;

    }

    #endif




       三、接下来说下Xcode4与Xcode5

讲真,Xcode4与Xcode5真没啥说的,Xcode版本对比最初是想留给Xcode5与Xcode6的,想了下,还是先铺垫一下Xcode5相对Xcode4新增的东西。

下面的总结可能不全。

  • 1、精简了顶部工具栏

  • 2、更易用的版本管理。Xcode5为版本管理留出了专门的一个Source Control菜单。在编辑代码的时候,可以直接对某一行进行blame了,在该行点击右键选Show Blame for Line,就能看到最后改动的人的信息。

  • 3、方便的工程配置。

    • 1)首先是在Build Setting的General里,加入了Team的设置,只要填写对应的Apple ID和应用Bundle ID,Xcode就将自动去寻找对应的Provisioning Profile,并使用合适的Provisioning来进行应用打包
    • 2)另一个重要改进是在Build选项中加入了Capabilities标签。打开和配置iCloud, GameCenter,Passbook,IAP,Maps,Keychain,后台模式和Data Protection,当然还有iOS7新加入的Inter-app Audio
  • 4、资源管理,Asset Catalog和Image Slicing

    • 1) 资源目录(Asset Catalog)可以方便开发者管理工程中使用的图片素材,利用开发中的命名规则(比如高清图的@2x,图标的Icon,Splash的Default等),来筛选和分类图片。建立一个资源目录十分简单,如果是老版本导入的工程,在工程设置中图标或者splash图的设置中点击Use Asset Catalog,Xcode将建立新的资源目录;如果是直接使用Xcode 5建立的工程的话,那么资源目录应该已经默认躺在工程中了. 添加资源目录后,在工程中会新加一个.xcassets后缀的目录用以整理和存放图片,该文件夹中存放了图片和对应的json文件来保存图片信息。为了能够使用资源目录的特性,以及更好的前向兼容性,建议将所有的图片资源都加入资源目录中:在工程中选择.xcassets文件,然后在资源目录中点击加号即可添加图片。另外,直接从工程外的Finder中将图片拖动到Xcode的资源目录界面中,也将把拖进来的图片拷贝并添加到资源目录中。对的,不再会有讨厌的弹窗出来,问你要拷贝还是要引用了
    • 2) Asset Catalog的意义在于为工程中的图片提供了一个存储信息的地方,不仅可以描述资源对应的设备,资源的版本和更新信息等,更重要的在于可以为Image Slicing服务。所谓Image Slicing,相当于一个可视化的resizableImageWithCapInsets:resizingMode:,可以用于指定在图片缩放时用来填充的像素。在资源目录中选择要slicing的图片,点击图片界面右下方的Show Slicing按钮,在想要设定切片的图片上点击Start Slicing,将出现左中右(或者上中下)三条可以拖动的指示线,通过拖动它们来设定实际的缩放范围
  • 5、新的调试和辅助功能.

    • 1) 调试中现在在编辑框内鼠标悬浮在变量名上,Xcode将会根据类型进行猜测,并输出最合适的结果以帮助观察。如果你认为鼠标悬停只能打打字符串或者数字的话你就错了,数组,字典什么的也不在话下,更过分的是设计图像的也能很好地显示。
    • 2) Xcode5集成了一个Debug面板,用来实现一个简单的Profiler,可以在调试时直接看到应用的CPU消耗,内存使用等情况(其他的还有iCloud情况,功耗和图形性能等)。在Debug运行时Cmd+6即可切换到该Debug界面。监测的内容简单明了,CPU使用用来检查是否有高占用或者尖峰(特别是主线程中),内存检测用来检查内存使用和释放的情况是否符合预期
    • 3) Xcode在注释式文档方面也有进步。



原创粉丝点击