ios10 新技能Get,必看

来源:互联网 发布:js屏蔽手机运营商广告 编辑:程序博客网 时间:2024/06/01 08:46
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
1.首先是版本适配的问题
 [[[[UIDevice currentDevice] systemVersion]substringToIndex:1] intValue] <=10,此方法不能再作为判断系统版本的方法,因为在iOS10中“substringToIndex:1”会被一直检测为iOS1
解决办法:OC
    使用[[[UIDevice currentDevice] systemVersion] compare:@"10"options:NSNumericSearch] == NSOrderedDescending来判断,其中决定你要判断的条件有两个,“compare”:决定要判断的版本,"NSOrderedSame、NSOrderedDescending、NSOrderedAscending"等等决定你是升序还是降序判断
解决办法:Swift
ifNSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion:10,minorVersion:0,patchVersion:0)){ 里面是条件成立后的代码块 }。
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
 2.UITabBarController 中的改进
     在iOS 10之前,tabBarItem上的文字颜色,默认是 蓝色,上面的新消息提醒数字badge默认是红色的,未选中的TabBarItem的文字颜色默认是黑色的,我们修改的话,也只能修改它的默认颜色,其它的就不能进行个性化定制,使用起来非常的不方便,iOS10之后我们可以轻松个性化定制了。
3.隐私数据访问问题:
你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash.这是因为iOS对用户的安全和隐私的增强,在申请很多私有权限的时候都需要添加描述,但是,在使用Xcode8之前的Xcode还是使用系统的权限通知框.
要想解决这个问题,只需要在info.plist添加NSContactsUsageDescription的key,value自己随意填写就可以,这里列举出对应的key(Source Code模式下):

   
   NSPhotoLibraryUsageDescription
   App需要您的同意,才能访问相册
   
   NSCameraUsageDescription
   App需要您的同意,才能访问相机
   
   NSMicrophoneUsageDescription               ios10 新技能Get,必看
   App需要您的同意,才能访问麦克风
   
   NSLocationUsageDescription
   App需要您的同意,才能访问位置
   
   NSLocationWhenInUseUsageDescription
   App需要您的同意,才能在使用期间访问位置
   
   NSLocationAlwaysUsageDescription
   App需要您的同意,才能始终访问位置
   
   NSCalendarsUsageDescription
   App需要您的同意,才能访问日历
   
   NSRemindersUsageDescription
   App需要您的同意,才能访问提醒事项
   
   NSMotionUsageDescription App需要您的同意,才能访问运动与健身
   
   NSHealthUpdateUsageDescription
   App需要您的同意,才能访问健康更新
   
   NSHealthShareUsageDescription
   App需要您的同意,才能访问健康分享
   
   NSBluetoothPeripheralUsageDescription
   App需要您的同意,才能访问蓝牙
   
   NSAppleMusicUsageDescription
   App需要您的同意,才能访问媒体资料库

-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
4.UIColor的问题
官方文档中说:大多数core开头的图形框架和AVFoundation都提高了对扩展像素和宽色域色彩空间的支持.通过图形堆栈扩展这种方式比以往支持广色域的显示设备更加容易。现在对UIKit扩展可以在sRGB的色彩空间下工作,性能更好,也可以在更广泛的色域来搭配sRGB颜色.如果你的项目中是通过低级别的api自己实现图形处理的,建议使用sRGB,也就是说在项目中使用了RGB转化颜色的建议转换为使用sRGB,在UIColor类中新增了两个api:

    - (UIColor*)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)greenblue:(CGFloat)blue alpha:(CGFloat)alphaNS_AVAILABLE_IOS(10_0);
    + (UIColor*)colorWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)greenblue:(CGFloat)blue alpha:(CGFloat)alphaNS_AVAILABLE_IOS(10_0);
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
5.UICollectionViewCell的的优化

在iOS 10之前,UICollectionView上面如果有大量cell,当用户活动很快的时候,整个UICollectionView的卡顿会很明显,为什么会造成这样的问题,这里涉及到了iOS系统的重用机制,当cell准备加载进屏幕的时候,整个cell都已经加载完成,等待在屏幕外面了,也就是整整一行cell都已经加载完毕,这就是造成卡顿的主要原因,专业术语叫做:掉帧.
要想让用户感觉不到卡顿,我们的app必须帧率达到60帧/秒,也就是说每帧16毫秒要刷新一次.
iOS 10 之前UICollectionViewCell的生命周期是这样的:

   1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在这个方法里面,可以重置cell的状态,加载新的数据;
   2.继续滑动,就会调用cellForItemAtIndexPath方法,在这个方法里面给cell赋值模型,然后返回给系统;
   3.当cell马上进去屏幕的时候,就会调用willDisplayCell方法,在这个方法里面我们还可以修改cell,为进入屏幕做最后的准备工作;
   4.执行完willDisplayCell方法后,cell就进去屏幕了.当cell完全离开屏幕以后,会调用didEndDisplayingCell方法.

iOS 10 UICollectionViewCell的生命周期是这样的:

   1.用户滑动屏幕,屏幕外有一个cell准备加载进来,把cell从reusr队列拿出来,然后调用prepareForReuse方法,在这里当cell还没有进去屏幕的时候,就已经提前调用这个方法了,对比之前的区别是之前是cell的上边缘马上进去屏幕的时候就会调用该方法,而iOS10 提前到cell还在屏幕外面的时候就调用;
   2.在cellForItemAtIndexPath中创建cell,填充数据,刷新状态等操作,相比于之前也提前了;
   3.用户继续滑动的话,当cell马上就需要显示的时候我们再调用willDisplayCell方法,原则就是:何时需要显示,何时再去调用willDisplayCell方法;
   4.当cell完全离开屏幕以后,会调用didEndDisplayingCell方法,跟之前一样,cell会进入重用队列.
    在iOS 10之前,cell只能从重用队列里面取出,再走一遍生命周期,并调用cellForItemAtIndexPath创建或者生成一个cell.
    在iOS 10中,系统会cell保存一段时间,也就是说当用户把cell滑出屏幕以后,如果又滑动回来,cell不用再走一遍生命周期了,只需要调用willDisplayCell方法就可以重新出现在屏幕中了.
    iOS 10中,系统是一个一个加载cell的,二以前是一行一行加载的,这样就可以提升很多性能;
    iOS 10新增加的Pre-Fetching预加载
   这个是为了降低UICollectionViewCell在加载的时候所花费的时间,在 iOS 10中,除了数据源协议和代理协议外,新增加了一个UICollectionViewDataSourcePrefetching协议,这个协议里面定义了两个方法:

    -(void)collectionView:(UICollectionView *)collectionViewprefetchItemsAtIndexPaths:(NSArray *)indexPathsNS_AVAILABLE_IOS(10_0);
    -(void)collectionView:(UICollectionView *)collectionViewcancelPrefetchingForItemsAtIndexPaths:(NSArray *)indexPathsNS_AVAILABLE_IOS(10_0);

在ColletionView prefetchItemsAtindexPaths这个方法是异步预加载数据的,当中的indexPaths数组是有序的,就是item接收数据的顺序;
CollectionView cancelPrefetcingForItemsAtindexPaths这个方法是可选的,可以用来处理在滑动中取消或者降低提前加载数据的优先级.
注意:这个协议并不能代替之前读取数据的方法,仅仅是辅助加载数据.
Pre-Fetching预加载对UITableViewCell同样适用.
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
6.UIRefreshControl的使用

在iOS 10 中,UIRefreshControl可以直接在UICollectionView和UITableView中使用,并且脱离了UITableViewController.现在RefreshControl是UIScrollView的一个属性.
使用方法:

   UIRefreshControl *refreshControl = [[UIRefreshControl alloc]init];
   [refreshControl addTarget:self action:@selector(loadData)forControlEvents:UIControlEventValueChanged];
   collectionView.refreshControl = refreshControl;
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
7.UIApplication对象中openUrl被废弃
  在iOS10.0以前的年代,我们要想使用应用程序去打开一个网页或者进行跳转,直接使用[[UIApplicationsharedApplication] openURL 方法就可以了,但是在iOS 10已经被废弃了,因为使用这种方式,处理的结果我们不能拦截到也不能获取到,对于开发是非常不利的,在iOS10全新的退出了  [[UIApplication sharedApplication]openURL:nil options:nil completionHandler:nil];有一个成功的回调block可以进行监视。
8.非常非常重要,第三方键盘一直都不能很方便的拥有长按地球键的功能,现在有了。通过handleInputModeListFromView:withEvent: 可以弹出系统键盘列表。同时使用documentInputMode 可以检测输入上下文中的语言,你可以对输入方式进行一些类似于对齐方式的调整。
9.CoreData提升了并发访问性能
10. 继2014年苹果推出VoIP证书后,这次VoIP 接口的开放,以及一个全新的 AppExtension,简直是VOIP的福音,可见苹果对VOIP的重视。callkit框架VoIP应用程序集成与iPhone的用户界面,给用户一个很棒的经历。用这个框架来让用户查看和接听电话的锁屏和VoIP管理联系人电话在手机APP的收藏夹和历史的观点。

callkit还介绍了应用程序的扩展,使呼叫阻塞和来电识别。您可以创建一个应用程序扩展,可以将一个电话号码与一个名称联系起来,或者告诉系统当一个号码应该被阻止。
-----------------------------------------------------------------------------------------------------------
iOS10的新技能,必看。喜欢的话,关注微博哦。
-----------------------------------------------------------------------------------------------------------
0 0
原创粉丝点击