第三十二篇、iOS 10开发

1.语音识别

苹果官方在文档中新增了API   Speech,那么在以前我们处理语音识别非常的繁琐甚至很多时候可能需要借助于第三方框架处理,那么苹果推出了这个后,我们以后处理起来就非常的方便了,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 =[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];

     //2.创建一个语音识别对象

    SFSpeechRecognizer *sf =[[SFSpeechRecognizer alloc] initWithLocale:local];

    

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

    

    NSURL *url =[[NSBundle mainBundle] URLForResource:@"游子吟.mp3" withExtension:nil];

    //4.将资源包中获取的url 传递给 request 对象

    SFSpeechURLRecognitionRequest *res =[[SFSpeechURLRecognitionRequest alloc] initWithURL:url];

    

    //5.发送一个请求

    [sf recognitionTaskWithRequest:res resultHandler:^(SFSpeechRecognitionResult * _Nullable result, NSError * _Nullable error) {

        if (error!=nil) {

            NSLog(@"语音识别解析失败,%@",error);

        }

        else

        {

            //解析正确

            NSLog(@"---%@",result.bestTranscription.formattedString);

        }

    }];

/**

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

***/

2.UITabBarController 中的改进

在iOS 10之前,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 =[[OneViewController alloc] init];

    

    //2.设置每一个控制器上的tabbar

    oneVc.view.backgroundColor =[UIColor redColor];

    

  

    

    

    //设置标题

    oneVc.tabBarItem.title = @"首页";

    

    

    

    TwoViewController *twovC =[[TwoViewController alloc] init];

    

    twovC.view.backgroundColor =[UIColor purpleColor];

    

    

      //设置标题

    twovC.tabBarItem.title = @"圈子";

    ThreeViewController *threVC =[[ThreeViewController alloc] init];

    threVC.view.backgroundColor =[UIColor blueColor];

    

      //设置标题

    threVC.tabBarItem.title = @"社交";

    

    

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

    

    [self addChildViewController:oneVc];

    

    [self addChildViewController:twovC];

    [self addChildViewController:threVC];

    

    

    

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

    

    oneVc.tabBarController.tabBar.tintColor =[UIColor yellowColor];

    

        twovC.tabBarController.tabBar.tintColor =[UIColor yellowColor];

    

        threVC.tabBarController.tabBar.tintColor =[UIColor yellowColor];

    

    

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

    

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

    

    oneVc.tabBarController.tabBar.unselectedItemTintColor =[UIColor redColor];

    

    

    //tabbarItem 中属性

    

    //数字提醒的颜色  在iOS 10之前的版本默认都是数字提醒都是红色

    oneVc.tabBarItem.badgeColor =[UIColor orangeColor];

    oneVc.tabBarItem.badgeValue =@"90";

    

    //将tabBarItem 中数字提醒默认的白色改掉  使用富文本修改

    [oneVc.tabBarItem setBadgeTextAttributes:@{

                                               NSForegroundColorAttributeName:[UIColor blackColor]

                                               } forState:UIControlStateNormal];

效果图:

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

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

核心代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/*

      在iOS 10当中,当咱们用户将手机的字体大小进行了设置调整之后,那么app中设置相关代码字体也会跟着一起变化 ,支持常见一些字体UI控件 比如uilabel uibutton

     **/

    [super viewDidLoad];

    

    //设置字体的改变大小

    self.labels.font =[UIFont preferredFontForTextStyle:UIFontTextStyleBody];

    //允许改变

    

    /*

       苹果官方明确的告诉你必须和  preferredFontForTextStyle 或者preferredFontForTextStyle:(NSString *)style compatibleWithTraitCollection 进行结合使用

       注意这里不支持模拟器操作

     **/

    

    self.labels.adjustsFontForContentSizeCategory = YES;

4. UIViewPropertyAnimator属性动画器

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

UIViewPropertyAnimator 是 iOS 10 中新增的一个执行 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"

@interface ViewController ()

@property(nonatomic,strong)UIView *myView;

@property(nonatomic,strong)UIViewPropertyAnimator *myViewPro;

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    

    //1.创建一个View对象

    UIView *Views =[[UIView alloc] initWithFrame:CGRectMake(50, 50, 100, 100)];

    Views.backgroundColor =[UIColor yellowColor];

    [self.view addSubview:Views];

    //2.创建一个外部的变量进行引用

    

    self.myView = Views;

    

    

    //3.创建一个view 动画器

    UIViewPropertyAnimator *viewPro  =[UIViewPropertyAnimator runningPropertyAnimatorWithDuration:1.0 delay:30.0 options:UIViewAnimationOptionCurveLinear animations:^{

        //使用View动画器修改View的frame

        self.myView.frame = CGRectMake(230, 230, 130, 130);

    } completion:nil];

    

    self.myViewPro = viewPro;

}

//结束

- (IBAction)stop:(id)sender {

    

    // YES 和NO 适用于设置当前这个属性动画器是否可以继续使用

    [self.myViewPro stopAnimation:YES];

}

//继续

- (IBAction)continued:(id)sender {

    

    

    //UITimingCurveProvider

    /**

    @property(nullable, nonatomic, readonly) UICubicTimingParameters *cubicTimingParameters;

    @property(nullable, nonatomic, readonly) UISpringTimingParameters *springTimingParameters;

     

     **/

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

    

    //这个取值 决定弹簧抖动效果 的大小 ,越往  0 靠近那么就越明显

    UISpringTimingParameters *sp =[[UISpringTimingParameters alloc] initWithDampingRatio:0.01];

    

    //设置一个动画的效果

//    UICubicTimingParameters *cub =[[UICubicTimingParameters alloc] initWithAnimationCurve:UIViewAnimationCurveEaseInOut];

    

     //durationFactor  给一个默认值 1就可以

    [self.myViewPro continueAnimationWithTimingParameters:sp durationFactor:1.0];

}

//暂停

- (IBAction)puase:(id)sender {

    

    [self.myViewPro pauseAnimation];

}

//开始

- (IBAction)start:(id)sender {

    

    [self.myViewPro startAnimation];

}

效果图:

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

)displayP3Red green:(

CGFloat

)green blue:(

CGFloat

)blue alpha:(

CGFloat

)alpha 

NS_AVAILABLE_IOS

(

10

_0);

方法可以更加精准的设置颜色了。

6.UIApplication对象中openUrl被废弃

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

苹果官方解释:


1

2

3

4

5

6

   //说明在iOS 10.0中openUrl方法已经废弃了 改为openURL:nil options:nil completionHandler:^(BOOL success

    /*

     // Options are specified in the section below for openURL options. An empty options dictionary will result in the same

     // behavior as the older openURL call, aside from the fact that this is asynchronous and calls the completion handler rather

     // than returning a result.

     // The completion handler is called on the main queue.

关键代码:


1

2

3

  [[UIApplication sharedApplication] openURL:nil options:nil completionHandler:^(BOOL success) {

        

    }];

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

6. SiriKit

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

7.  User Notifications

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

8.CallKit

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

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

9.第三方键盘的改进

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

10.iOS10 对隐私权限的管理

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

崩溃日志:

***This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app‘s Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

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

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

官方解释:This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app‘s Info.plist must contain an NSAppleMusicUsageDescription key with a string value explaining to the user how the app uses this data.

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

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

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

12.APPlePlay(苹果支付)

可用于 SFSafariViewController

可用于没有UI的extensions中

在 iMessage 应用中也支持 ApplePay

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

14.刷新控件(UIRefresh Control)

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

核心代码:


1

2

3

4

5

6

7

8

9

10

11

12

   

//

//  UIRefreshControlHosting.h

//  UIKit

//

//  Copyright 2016 Apple Inc. All rights reserved.

//

#import <Foundation/Foundation.h>

@class UIRefreshControl;

NS_CLASS_AVAILABLE_IOS(10_0) @protocol UIRefreshControlHosting <NSObject>

@property (nonatomicstrong, nullable) UIRefreshControl *refreshControl __TVOS_PROHIBITED;

@end

15.GCD多线程支持创建私有队列

时间: 2024-08-29 02:05:09

第三十二篇、iOS 10开发的相关文章

第三十二篇、直播项目开发

1.直播app分类:主要分为两大类 >秀场直播 如:映客 花椒 >游戏直播 如:斗鱼 2.iOS主要实现的技术 >播放:播放远程服务器收集到的视频 >录播:主播通过手机直播,客户端需要将直播实时视频传输给服务器,以边其它手机客户端播放 >即时通讯:观众和主播互动的礼物,聊天及时呈现   >弹幕 >整体界面的搭建和展示 3.技术分析 数据-->解协议-->封装格式数据-->解封装-->音频压缩数据-->音频解码-->音频的原始数据

第三十二篇:Windbg中USB2.0调试环境的搭建

2011年的时候,为了开发USB Mass storage -- UASP (USB attached SCSI Protocol)的设备驱动程序,从米国买了两个USB2.0的调试小设备(如下图,每个似乎80美刀,贼贵的东西). 主要是用来替代串口115200波特率的响应速度慢,以便解决调试效率的问题. 当时,根据WINDBG的HELP文档,而且也GOOGLE了一些网上的相关参考内容,硬是没有把USB2.0的调试环境搭建起来. 后来有一段时间,朋友要开发驱动程序,他原来一直用一台配有PCI转13

mysql 第三十二篇文章~并发导致的从库延迟问题

一 简介:今天来聊聊周期性从库延迟的问题 二 背景:近期每天的指定时间段,收到从库延迟的报警,然后过一段时间恢复.由于从库是提供读服务的,所以需要解决 三 分析思路: 1 周期性延时,而且全部从库都出现延迟,应该是由于主库的DML操作引起的 2 查看主库的慢日志记录(我们的数据库会每小时进行切割),也并没有发生DML慢语句,排除因为慢sql(DML操作)导致的问题,主库的DML操作如果出现慢语句,同步到从库会更慢,比如update,delete语句 3 查看从库的慢日志记录,是否出现DML慢语句

我的第三十二篇博客---mongo和python结合

交互再用管道 或者$ 的时候 要加引号括住ret=collection.find({'$or':[{'age':{'$gt':20}},{'age':{'$lt':17}}]})ret=collection.aggregate([{"$group":{'_id':'$age'}}]) from pymongo import MongoClientclient=MongoClient(host='localhost',port=27017)collection=client['test'

小刘同学的一百三十二篇日记

感觉很伤...又不能11点之前睡觉. 其实今天还是在改论文了啊. 周五之前一定要交定稿了. 就不和大家多说了. 今天没有分享技术?? 那么大家早安吧?? morning~~ 原文地址:https://www.cnblogs.com/xiaoliutongxue/p/9005659.html

第三十二篇-NavigationView导航抽屉的使用

效果图: 导航抽屉所用到的布局是DrawerLayout,可以在里面添加一个线性布局和TextView组件,TextView组件的文本信息就是"主页面".然后和线性布局平行添加一个导航抽屉NavigationView 设置导航抽屉在左边,并且添加它的头部以及菜单 android:layout_gravity="left"app:headerLayout="@layout/head"app:menu="@menu/menu_main&qu

开始写游戏 --- 第三十二篇

目前游戏进度: 1.修改了副本的方式 2.添加登录.选择服务器界面 3.正在研究pomelo框架 详情: 1.修改了副本的方式 可以通过配置来修改副本的地图.敌人: 这是修改副本章节的配置: 这是章节下的关卡的配置: 2.添加登录.注册.选择服务器界面 3.正在研究pomelo框架 嘛~现在只是看到了 明天继续. 原文地址:https://www.cnblogs.com/dmc-nero/p/12386875.html

Python开发【第二十二篇】:Web框架之Django【进阶】

Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 新随笔 联系 订阅 管理 随笔-124  文章-127  评论-205 Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻

Egret入门学习日记 --- 第三十六篇(书中 10.7 ~ 10.8 节 内容)

第三十六篇(书中 10.7 ~ 10.8 节 内容) 开始 书中 10.7 节内容. 书中 10.7 节内容结束. 书中重点: 1.导出素材. 2.配置粒子库. 3.播放动画. 开始操作: 1.导出素材. 我设置好了雪花的效果. 接着是导出. 这是导出后的资源文件. 导入Egret的预加载资源组中. 2.配置粒子库. 下载好官方的粒子库. https://github.com/egret-labs/egret-game-library 拷贝粒子库到项目外,记住 项目文件夹外! 配置好 egret