iOS 10 新特性

1.语音识别

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

可以实现连续的语音识别

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

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

官方文档:

核心代码:

#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.创建出三个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 [email protected]"90";

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

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

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

核心代码:

/*
      在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 动画的类,具有以下特点:

可中断性

可擦除

可反转性

丰富的动画时间控制功能

官方文档:

核心代码:

#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方法

核心代码:

+ (
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 可以进行监视。

苹果官方解释:

//说明在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.

关键代码:

[[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。

核心代码:

//
//  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 (nonatomic, strong, nullable) UIRefreshControl *refreshControl __TVOS_PROHIBITED;
@end

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

时间: 2024-10-16 09:07:39

iOS 10 新特性的相关文章

iOS 8新特性之扩展(Extension)

本文由海水的味道收集整理,欢迎转载 当前版本 0.0.1  iOS 8新特性之扩展 一.扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性.扩展让app之间的数据交互成为可能.用户可以在app中使用其他应用提供的功能,而无需离开当前的应用. 在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据. 而在引入扩展之后,其他app可以与扩展进行数据交换.基于安全和性能的考虑,每一个扩展运行在一个单独的进程中,它拥有自己的bundle, b

iOS iOS8新特性-UIAlertController

iOS iOS8新特性--UIAlertController 1. iOS7及iOS7之前警告类控件有UIAlertView和UIActionSheet 1.1 UIAlertView的使用 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"警告" message:@"这是一个UIAlertView" delegate:nil cancelButtonTitle:@"取消" oth

Windows 10 新特性 -- Bing Maps 3D地图开发入门(一)

本文主要内容是讲述如何创建基于 Windows Universal App 的Windows 10 3D地图应用,涉及的Windows 10新特性包括 Bing Maps 控件.Compiled data bindings (x:Bind),SplitView 和Hamburger. 本文中的示例源代码已在github 上共享( https://github.com/gaoxuesong/navigado ). 获取Bing Maps密钥 在 Universal Windows App 中使用必

iOS 9应用开发教程之iOS 9新特性

iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统于2015年6月8号(美国时间)被发布.本章将主要讲解iOS 9的新特性.以及使用Xcode 7.0如何编写一个简单的iOS 9的应用程序等内容. iOS 9新特性 在2015年6月8日即北京时间2015年6月9日的WWDC大会上,苹果公司代表讲解了很多iOS 9带来的新特性.本节将讲解一些主要的特性. Siri语音助手智能化 Siri语音助手的智能性能主要

JDK 5 ~ 10 新特性倾情整理!

JDK 5 ~ 10 新特性倾情整理! 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对JDK有一个全面的了解,下面我为大家整理了JDK5~10的所有关键新特性! JDK5新特性 自动装箱与拆箱 枚举 静态导入 可变参数(Varargs) 内省(introspector) 泛型(Generic) For-Each循环 JDK6新特性 Desktop类和SystemTray类 使用JAXB2来

jdk1.5-1.10新特性

从网上搜集摘录的jdk特性,在这里记录下来以便自我学习. jdk5新特性    1.自动装箱和拆箱    2.枚举    3.静态导入    4.可变参数    5.內省       是Java语言对Bean类属性.事件的一种缺省处理方法.例如类A中有属性那么,那我们可以通过getName,setName来得到其值或者设置新的值.通过getName/setName来访问name属性,这就是默认的规则.Java中提供了一套API用来访问某个属性的getter,setter方法,通过这些API可以使

iOS 语法新特性-modern syntax(iOS6后,Xcode4.4后,OS X 10.8.2后)

- (void)modernSyntax { /* 一.语法新特性NSNumber.NSArray.NSDictionary*/ // ---- NSNumber 新语法 ---- NSNumber *num = nil; // num = [NSNumber numberWithInt:1]; num = @1; // numberWithInt/numberWithShort num = @1u; // numberWithUnsignedInt/numberWithUnsignedShor

iOS开发——新特性OC篇&amp;IOS9 SDK新特性

iOS9 SDK新特性 WWDC 2015苹果开发者大会是移动开发者一年一度的盛会,InfoQ中文站除了第一时间整理Keynote内容分享给大家之外,还邀请了资深的一线开发者分享他们的收获.本文为王巍(@onevcat)对WWDC上透露的iOS 9 SDK新特性的总结,分享给广大的iOS开发者. 年年岁岁花相似,岁岁年年人不同.今年的 WWDC 一如既往的热闹,得益于 Apple 的随机抽选机制,这两年有更多的中国开发者有机会亲临现场进行体验,并与全球开发者取得更多的交流.更多的开发者可能只能在

iOS 8 新特性 (扩展)

一.扩展概述 扩展(Extension)是iOS 8中引入的一个非常重要的新特性.扩展让app之间的数据交互成为可能.用户可以在app中使用其他应用提供的功能,而无需离开当前的应用. 在iOS 8系统之前,每一个app在物理上都是彼此独立的,app之间不能互访彼此的私有数据. 而在引入扩展之后,其他app可以与扩展进行数据交换.基于安全和性能的考虑,每一个扩展运行在一个单独的进程中,它拥有自己的bundle, bundle后缀名是.appex.扩展bundle必须包含在一个普通应用的bundle