您的位置:首页 > 移动开发 > IOS开发

iOS10开发的最新知识和心得体会

2016-09-14 00:00 253 查看
那么在前两天我的Xcode8.0新特性和iOS10.0开发分享后,短短的时间吸引了很多粉丝,于是我更加坚定要努力,不辜负更多人的期望,经常这一两天挑灯夜战的精心准备,现在将整理出来的iOS10开发的最新知识和心得体会再次分享给大家,让我们小码哥每一个学员都能时刻站在IT界最新的前沿上,学习到最新最潮的技术!

网盘地址:http://pan.baidu.com/s/1i45UWN7密码:cvr5

苹果在本地的WWDC结束之后呢,像开发者推送了iOS10系统,虽然是beta版,但是热爱技术人总是不会停止脚步去研究去学习,这次更新主要表现在以下这几个方面。

1.语音识别

苹果官方在文档中新增了APISpeech,那么在以前我们处理语音识别非常的繁琐甚至很多时候可能需要借助于第三方框架处理,那么苹果推出了这个后,我们以后处理起来就非常的方便了,speech具有以下特点:

可以实现连续的语音识别

可以对语音文件或者语音流进行识别

最佳化自由格式的听写(可理解为多语言支持)和搜索式的字符串

官方文档:





核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#import<Speech/Speech.h>
//1.创建本地化标识符
NSLocale*local=[[NSLocalealloc]initWithLocaleIdentifier:@"zh_CN"];
//2.创建一个语音识别对象
SFSpeechRecognizer*sf=[[SFSpeechRecognizeralloc]initWithLocale:local];

//3.将bundle中的资源文件加载出来返回一个url

NSURL*url=[[NSBundlemainBundle]URLForResource:@"游子吟.mp3"withExtension:nil];
//4.将资源包中获取的url传递给request对象
SFSpeechURLRecognitionRequest*res=[[SFSpeechURLRecognitionRequestalloc]initWithURL:url];

//5.发送一个请求
[sfrecognitionTaskWithRequest:resresultHandler:^(SFSpeechRecognitionResult*_Nullableresult,NSError*_Nullableerror){
if(error!=nil){
NSLog(@"语音识别解析失败,%@",error);
}
else
{
//解析正确
NSLog(@"---%@",result.bestTranscription.formattedString);
}
}];
/**

语音识别同样的需要真机进行测试,因为需要硬件的支持,还需要访问权限

***/

2.UITabBarController中的改进

在iOS10之前,tabBarItem上的文字颜色,默认是蓝色,上面的新消息提醒数字badge默认是红色的,未选中的TabBarItem的文字颜色默认是黑色的,我们修改的话,也只能修改它的默认颜色,其它的就不能进行个性化定制,使用起来非常的不方便,iOS10之后我们可以轻松个性化定制了。

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//1.创建出三个UIViewcontroller对象

OneViewController*oneVc=[[OneViewControlleralloc]init];

//2.设置每一个控制器上的tabbar
oneVc.view.backgroundColor=[UIColorredColor];




//设置标题
oneVc.tabBarItem.title=@"首页";



TwoViewController*twovC=[[TwoViewControlleralloc]init];

twovC.view.backgroundColor=[UIColorpurpleColor];


//设置标题
twovC.tabBarItem.title=@"圈子";
ThreeViewController*threVC=[[ThreeViewControlleralloc]init];
threVC.view.backgroundColor=[UIColorblueColor];

//设置标题
threVC.tabBarItem.title=@"社交";


//2.将创建好的三个普通控制器加入到tabbarController控制器中

[selfaddChildViewController:oneVc];

[selfaddChildViewController:twovC];
[selfaddChildViewController:threVC];



//改变tabbar上面的文字默认颜色

oneVc.tabBarController.tabBar.tintColor=[UIColoryellowColor];

twovC.tabBarController.tabBar.tintColor=[UIColoryellowColor];

threVC.tabBarController.tabBar.tintColor=[UIColoryellowColor];


//使用iOS10新推出的修改tabbar未选中的tintColor颜色

//这一句代码将tabbar未选中的时候的默认色-黑色改为红色

oneVc.tabBarController.tabBar.unselectedItemTintColor=[UIColorredColor];


//tabbarItem中属性

//数字提醒的颜色在iOS10之前的版本默认都是数字提醒都是红色
oneVc.tabBarItem.badgeColor=[UIColororangeColor];
oneVc.tabBarItem.badgeValue=@"90";

//将tabBarItem中数字提醒默认的白色改掉使用富文本修改
[oneVc.tabBarItemsetBadgeTextAttributes:@{
NSForegroundColorAttributeName:[UIColorblackColor]
}forState:UIControlStateNormal];
效果图:



3.iOS10.0中字体跟随系统设置变化大小

在以前如果说我们想改变APP中程序的字体大小,我们只能自定义字体或者使用runtime进行处理,或者都得设置UIFont,非常的不妨百年,从iOS10苹果官方允许我们自定义设置

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
在iOS10当中,当咱们用户将手机的字体大小进行了设置调整之后,那么app中设置相关代码字体也会跟着一起变化,支持常见一些字体UI控件比如uilabeluibutton
**/
[superviewDidLoad];

//设置字体的改变大小
self.labels.font=[UIFontpreferredFontForTextStyle:UIFontTextStyleBody];
//允许改变

/*
苹果官方明确的告诉你必须和preferredFontForTextStyle或者preferredFontForTextStyle:(NSString*)stylecompatibleWithTraitCollection进行结合使用
注意这里不支持模拟器操作
**/

self.labels.adjustsFontForContentSizeCategory=YES;
4.UIViewPropertyAnimator属性动画器

那么在iOS10之前,我们使用UIView做动画效果或者自定义一些layer的动画,如果开始了,一般无法进行停止操作更不能暂停操作,而且一些非常复杂的动画处理也比较麻烦,但是在iOS10,苹果退出了一个全新的APIUIViewPropertyAnimator,可供我们处理动画操作

UIViewPropertyAnimator是iOS10中新增的一个执行View动画的类,具有以下特点:

可中断性

可擦除

可反转性

丰富的动画时间控制功能

官方文档:





核心代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#import"ViewController.h"
@interfaceViewController()
@property(nonatomic,strong)UIView*myView;
@property(nonatomic,strong)UIViewPropertyAnimator*myViewPro;
@end
@implementationViewController
-(void)viewDidLoad{
[superviewDidLoad];

//1.创建一个View对象
UIView*Views=[[UIViewalloc]initWithFrame:CGRectMake(50,50,100,100)];
Views.backgroundColor=[UIColoryellowColor];
[self.viewaddSubview:Views];
//2.创建一个外部的变量进行引用

self.myView=Views;


//3.创建一个view动画器
UIViewPropertyAnimator*viewPro=[UIViewPropertyAnimatorrunningPropertyAnimatorWithDuration:1.0delay:30.0options:UIViewAnimationOptionCurveLinearanimations:^{
//使用View动画器修改View的frame
self.myView.frame=CGRectMake(230,230,130,130);
}completion:nil];

self.myViewPro=viewPro;
}
//结束
-(IBAction)stop:(id)sender{

//YES和NO适用于设置当前这个属性动画器是否可以继续使用
[self.myViewProstopAnimation:YES];
}
//继续
-(IBAction)continued:(id)sender{


//UITimingCurveProvider
/**
@property(nullable,nonatomic,readonly)UICubicTimingParameters*cubicTimingParameters;
@property(nullable,nonatomic,readonly)UISpringTimingParameters*springTimingParameters;

**/
//设置弹簧效果DampingRatio取值范围是0-1

//这个取值决定弹簧抖动效果的大小,越往0靠近那么就越明显
UISpringTimingParameters*sp=[[UISpringTimingParametersalloc]initWithDampingRatio:0.01];

//设置一个动画的效果
//UICubicTimingParameters*cub=[[UICubicTimingParametersalloc]initWithAnimationCurve:UIViewAnimationCurveEaseInOut];

//durationFactor给一个默认值1就可以
[self.myViewProcontinueAnimationWithTimingParameters:spdurationFactor:1.0];
}
//暂停
-(IBAction)puase:(id)sender{

[self.myViewPropauseAnimation];
}
//开始
-(IBAction)start:(id)sender{

[self.myViewProstartAnimation];
}
效果图:



5.UIColor新增方法

在iOS10之前,UIColor中设置颜色只能通过RGB来表示,在iOS原生还不支持#16进制写法,还得自己写分类去处理,我们知道RGB表示的颜色是优先的,而且也是不精准的,那么在iOS10中,苹果官方新增了colorWithDisplayP3Red方法

关键代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+(
UIColor
*)colorWithDisplayP3Red:(
CGFloat
)displayP3Redgreen:(
CGFloat
)greenblue:(
CGFloat
)bluealpha:(
CGFloat
)alpha
NS_AVAILABLE_IOS
(
10
_0);
方法可以更加精准的设置颜色了。

6.UIApplication对象中openUrl被废弃

在iOS10.0以前的年代,我们要想使用应用程序去打开一个网页或者进行跳转,直接使用[[UIApplicationsharedApplication]openURL方法就可以了,但是在iOS10已经被废弃了,因为使用这种方式,处理的结果我们不能拦截到也不能获取到,对于开发是非常不利的,在iOS10全新的退出了[[UIApplicationsharedApplication]openURL:niloptions:nilcompletionHandler:nil];有一个成功的回调block可以进行监视。

苹果官方解释:

1
2
3
4
5
6
//说明在iOS10.0中openUrl方法已经废弃了改为openURL:niloptions:nilcompletionHandler:^(BOOLsuccess
/*
//OptionsarespecifiedinthesectionbelowforopenURLoptions.Anemptyoptionsdictionarywillresultinthesame
//behaviorastheolderopenURLcall,asidefromthefactthatthisisasynchronousandcallsthecompletionhandlerrather
//thanreturningaresult.
//Thecompletionhandleriscalledonthemainqueue.
关键代码:

1
2
3
[[UIApplicationsharedApplication]openURL:niloptions:nilcompletionHandler:^(BOOLsuccess){

}];
当然除了以上的这些,其它的还有很多,比如下面这些

6.SiriKit

在iOS10里面开发者可以使用SiriSDK,毫无疑问这也是iOS10最重要的SDK。从此开发者可以使用原生API提供语音搜索、语音转文字消息甚至更多常见语音功能。

7.UserNotifications

这个API让你可以处理本地或远程的用户通知,并且可以基于某个条件,例如时间或者地理位置。这个异常强大,貌似可以拦截并替换自己app发下来的payload,并且在之前版本SDK的本地通知框架已经被废弃了,在上一篇帖子有所讲到以及代码都有展示。

8.CallKit

继2014年苹果推出VoIP证书后,这次VoIP接口的开放,以及一个全新的AppExtension,简直是VOIP的福音,可见苹果对VOIP的重视。callkit框架VoIP应用程序集成与iPhone的用户界面,给用户一个很棒的经历。用这个框架来让用户查看和接听电话的锁屏和VoIP管理联系人电话在手机APP的收藏夹和历史的观点。

callkit还介绍了应用程序的扩展,使呼叫阻塞和来电识别。您可以创建一个应用程序扩展,可以将一个电话号码与一个名称联系起来,或者告诉系统当一个号码应该被阻止。

9.第三方键盘的改进

非常非常重要,第三方键盘一直都不能很方便的拥有长按地球键的功能,现在有了。通过handleInputModeListFromView:withEvent:可以弹出系统键盘列表。同时使用documentInputMode可以检测输入上下文中的语言,你可以对输入方式进行一些类似于对齐方式的调整。

10.iOS10对隐私权限的管理

比如访问的摄像头、麦克风等硬件,都需要提前请求应用权限、允许后才可以使用,或者现在要提前声明,虽然以往要求不严格。在iOS10中比如遇到崩溃,日志:

崩溃日志:

***Thisapphascrashedbecauseitattemptedtoaccessprivacy-sensitivedatawithoutausagedescription.Theapp'sInfo.plistmustcontainanNSCameraUsageDescriptionkeywithastringvalueexplainingtotheuserhowtheappusesthisdata.

你需要在info.plist文件添加一个“NSContactsUsageDescription”的Key,Value添加一个描述。



视频播放需要在info.Plist中配置

官方解释:Thisapphascrashedbecauseitattemptedtoaccessprivacy-sensitivedatawithoutausagedescription.Theapp'sInfo.plistmustcontainanNSAppleMusicUsageDescriptionkeywithastringvalueexplainingtotheuserhowtheappusesthisdata.

访问用户的隐私数据,并且没有向用户说明,必须在plist(info.plist)中配置这个keyNSAppleMusicUsageDescription并且向用户说明.



11.Xcode7和Xcode8项目中的xib兼容问题

在Xcode8上打开项目要小心,尤其是对于xib过程,在变动后可不要随意点保存,否则当你回头用Xcode7打开时时发现报错了,Xcode保存的xib在xcode7上是识别不了的!

12.APPlePlay(苹果支付)

可用于SFSafariViewController

可用于没有UI的extensions中

在iMessage应用中也支持ApplePay

13.CoreData提升了并发访问性能

14.刷新控件(UIRefreshControl)

iOS系统自带的刷新控件支持所有的UIScrollView以及其子类,比如说UICollectionView,UITableView。

核心代码:

1
2
3
4
5
6
7
8
9
10
11
12

//
//UIRefreshControlHosting.h
//UIKit
//
//Copyright2016AppleInc.Allrightsreserved.
//
#import<Foundation/Foundation.h>
@classUIRefreshControl;
NS_CLASS_AVAILABLE_IOS(10_0)@protocolUIRefreshControlHosting<NSObject>
@property(nonatomic,strong,nullable)UIRefreshControl*refreshControl__TVOS_PROHIBITED;
@end
15.GCD多线程支持创建私有队列
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: