針對(duì)iOS10新增Api的詳細(xì)研究
本文主要是一些對(duì)iOS新功能的探索,之前發(fā)現(xiàn)博客里關(guān)于iOS新功能的分析大多是過于概括,每個(gè)功能幾句話,無法了解到具體的功能。所以本次的探索是基于Api層面,著重看一些具體用法所做的筆記,本來想分別畫個(gè)類圖來著,后來還是覺得太耗時(shí)而放棄。如果不想把蘋果iOSSDK里的.h文件都擺出來詳細(xì)讀,那看這篇筆記應(yīng)該是個(gè)不錯(cuò)的選擇。
本文以文檔的目錄為基礎(chǔ),提到的功能模塊有:
Proactive Suggestions
Integrating with the Messages App
User Notifications
Speech Recognition
Wide Color
Adapting to the True Tone Display
App Search Enhancements
Widget Enhancements
Security and Privacy Enhancements
還沒有詳細(xì)探索的模塊是
SiriKit
CallKit (工作職能和這里聯(lián)系不多,還不care這里)
Apple Pay Enhancements (工作職能和這里聯(lián)系不多,還不care這里)
SiriKit
SiriKit的功能非常強(qiáng)大,支持音頻、視頻、消息發(fā)送接收、搜索照片、預(yù)訂行程、管理鍛煉等等。在用到此服務(wù)時(shí),siri會(huì)發(fā)送Intent對(duì)象,里面包括用戶的請(qǐng)求和各種數(shù)據(jù),可以對(duì)這個(gè)intent處理選擇適當(dāng)?shù)捻憫?yīng)。 這個(gè)功能主要是看這兩個(gè)頭文件(#import <Intents/Intents.h>、#import <IntentsUI/IntentsUI.h>)所涵蓋到的類太多,前期先略過了,之后等iOS10可以推送更新了再做進(jìn)一步調(diào)研。
Proactive Suggestions 系統(tǒng)預(yù)先建議
背景就是iOS9的時(shí)候系統(tǒng)給予的主動(dòng)建議會(huì)通過:Spolight搜索,Safari搜索,Handoff,或者siri建議。 在iOS10之后新增了,鍵盤QuickType建議,地圖,車載娛樂,應(yīng)用切換,siri交互,鎖屏播放。 比如你正在一個(gè)應(yīng)用里看一個(gè)酒店,可以使用mapitem屬性保存正在查看的這個(gè)酒店的位置,然后你切換旅行或地圖App時(shí)這個(gè)位置可以自動(dòng)提供使用。 如果你需要這樣利用系統(tǒng)來共享一個(gè)位置,那你需要指定這個(gè)位置的經(jīng)緯度,地名,電話等屬性 來便于siri的直接調(diào)起。
文檔中還列出了幾種場(chǎng)景
1.在輸入框(UITextFiled)輸入時(shí),可以指定一下這個(gè)輸入框的類型,以便系統(tǒng)可以分析出用戶的語義。 是電話類型就建議一些電話,是地址類型就建議一些地址??聪骂^文件(#import <UIKit/UITextInputTraits.h>)可指定的類型 就是這個(gè)新增的textContentType字段,里面有很多種類型可選。
UIKIT_EXTERN NSString *const UITextContentTypeName NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeNamePrefix NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeGivenName NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeMiddleName NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeFamilyName NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeNameSuffix NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeNickname NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeJobTitle NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeOrganizationName NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeLocation NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeFullStreetAddress NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeStreetAddressLine1 NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeStreetAddressLine2 NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeAddressCity NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeAddressState NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeAddressCityAndState NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeSublocality NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeCountryName NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypePostalCode NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeTelephoneNumber NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeEmailAddress NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeURL NS_AVAILABLE_IOS(10_0); UIKIT_EXTERN NSString *const UITextContentTypeCreditCardNumber NS_AVAILABLE_IOS(10_0);
2.如果是視頻類App可以使用MPPlayableContentManager (#import <MediaPlayer/MPPlayableContentManager.h>)看了下,新增了一個(gè)屬性nowPlayingIdentifiers,蘋果的意思應(yīng)該是只要你以前是用這個(gè)多媒體類播放音樂的我就可以讓你在鎖屏頁面交互,需要配置在這個(gè)數(shù)組里。
3.如果是出行類app可以使用MKDirectionsRequest。 (#import <MapKit/MKDirectionsRequest.h> )這個(gè)類里幾乎沒有新增api,iOS10就新增了一個(gè)枚舉,而且看上去就是個(gè)默認(rèn)值。如果要使用此功能,需要配置在info.plist文件里 新增key - value ,MKDirectionsApplicationSupportedModes - MKDirectionsModeRideShare。
User Notifications 用戶通知
總體的意思就是支持了很多用戶定義的通知,并且可以捕捉到各個(gè)通知狀態(tài)的回調(diào)。以往通知的概念是:大家想接收的都提前做好準(zhǔn)備,然后一下全量分發(fā),沒收到也不管了,也不關(guān)心發(fā)送者?,F(xiàn)在用戶通知做成了和網(wǎng)絡(luò)請(qǐng)求有點(diǎn)像 一個(gè)先發(fā)request再得到response的流程,甚至封裝了error,可以在各個(gè)狀態(tài)的方法中做一些額外操作,并且也能取到一些字段,如發(fā)送者等。
此功能的頭文件入口在#import <UserNotifications/UserNotifications.h>
1.NSString+UserNotifications.h
有一個(gè)方法 localizedUserNotificationStringForKey: arguments: (提供該通知被呈現(xiàn)時(shí)的本地化字符串),猜測(cè)下面的類有很多initWithIdentifier的,他們的indentifier就是這個(gè)。
2.UNError.h
有一個(gè)屬性UNErrorDomain 和一個(gè)枚舉 UNErrorCode,顧名思義。
3.UNNotification.h
里面有兩個(gè)屬性,date日期 和 request,這個(gè)request是上面“8”的類型UNNotificationRequest,點(diǎn)進(jìn)去看了下比較清晰,有identifier標(biāo)識(shí),content內(nèi)容,trigger觸發(fā)條件, 和帶上這三個(gè)東西的初始化方法。 其中內(nèi)容 和 觸發(fā)條件這兩個(gè)屬性,分別是上面“7” 和 “12”的類型,這個(gè)下面再談。
4.UNNotificationAction.h
這個(gè)類突出的是一個(gè)通知的動(dòng)作,有identifier,title,options(枚舉,就是通知當(dāng)前的權(quán)限,允許?拒絕?前臺(tái)時(shí)允許?)屬性。然后就是帶上這三個(gè)東西的初始化方法。 然后比較費(fèi)解的就是下面有一個(gè)子類UNTextInputNotificationAction ,這個(gè)子類有兩個(gè)額外屬性, 按鈕title,和文本框placeholder, 為什么會(huì)是這兩個(gè)屬性? 莫非是點(diǎn)擊通知后下拉出的快速回復(fù),有一個(gè)輸入框和一個(gè)按鈕。
5.UNNotificationAttachment.h
這個(gè)里面就是URL(資源url屬性),type(附件類型)。 然后是帶上這兩個(gè)屬性的初始化方法。 下面聲明了幾個(gè)字符串常量,暫時(shí)還不知道具體用在哪里,typeHint,hiddenKey,clippingRectKey,TimeKey。
6.UNNotificationCategory.h
有indentifier屬性,actions(里面是數(shù)組),minimalActions(最重要的數(shù)組,就是只能給你兩個(gè)位置顯示你顯示哪兩個(gè),這么個(gè)意思),intentIdentifiers屬性(應(yīng)該是和上面的動(dòng)作數(shù)組關(guān)聯(lián)的吧),options(權(quán)限相關(guān),無?允許自定義關(guān)閉?允許車載系統(tǒng)交互?)。最后就是把這些都帶上的init方法。 猜測(cè)這個(gè)類之所以取名叫category應(yīng)該是,在某個(gè)地方展示通知的時(shí)候會(huì)把所有通知一一分類, 然后每個(gè)類別的通知可能最多只能讓你展示幾個(gè),如果不做限制應(yīng)該會(huì)展示全部通知,如果權(quán)限設(shè)置的是允許自定義關(guān)閉那可能就是支持類似一鍵清除的操作。
7.UNNotificationContent.h
消息的內(nèi)容,一看就能知道應(yīng)該是一個(gè)類似于Entity的東西,里面裝有大量的屬性:attachments(可選的附件集合),badge(小紅點(diǎn)數(shù)量),body,categoryIndentifier,launchImageName(從消息里點(diǎn)開的應(yīng)用程序應(yīng)該能看到啟動(dòng)圖對(duì)吧),subtitle,threadIdentifier(與request關(guān)聯(lián)),title,userInfo,sound這個(gè)是“11”的類型,應(yīng)該是同時(shí)來時(shí)的聲音,點(diǎn)開“11”看一下 ,就倆方法,defaultSound,soundNamed: 自定義聲音,都在~/Library/Sounds 目錄下。 恩再回到剛才那個(gè)content類里面有個(gè)子類UNMutableNotificationContent,屬性和父類相同,只不過是子類的屬性都可以修改了,父類的那些屬性都是readonly的。
8.UNNotificationRequest.h 上面第3條說過了
9.UNNotificationResponse.h
有action,也有request,那也就有response,這里面有兩個(gè)屬性,notification,actionIdentifier 響應(yīng)里就這倆破玩意。 然后有個(gè)子類UNTextInputNotificationResponse, 這里面就一個(gè)屬性u(píng)serText ,看命名很好猜,應(yīng)該就是前面說的那個(gè)有輸入框里輸入的內(nèi)容。
10.UNNotificationSettings.h
這個(gè)類里就是一些設(shè)置了,有一個(gè)枚舉說的是有沒有權(quán)限,一個(gè)枚舉說的是不支持?禁用?啟用?。 然后下面一大波屬性,小紅點(diǎn)設(shè)置,聲音設(shè)置,彈窗設(shè)置等等 都是這個(gè)枚舉類型, 最后還有個(gè)alertStyle屬性(枚舉,None?Banner?alert?)。
11.sound前面第7條說過了
12.UNNotificationTrigger.h
有一個(gè)屬性 repeats(是否重復(fù)發(fā)通知)。 下面有四個(gè)子類,push通知觸發(fā), 時(shí)間通知觸發(fā),日歷通知觸發(fā),地區(qū)通知觸發(fā), 時(shí)間的有timeInterval屬性, 日歷的有dateComponents屬性。 然后時(shí)間和日歷的子類都有nextTriggerDate 方法。
13.UNUserNotificationCenter.h
這里面東西多到吐了,同學(xué)你記得NSNotificationCenter么? 需要提一點(diǎn)的就是以前的通知中心有個(gè)方法[NSNotificationCenter defaultCenter], 這里是[UNUserNotificationCenter currentNotificationCenter], 提醒一下到時(shí)候別說敲不出來。 方法大多是一些remove,add,get等操作, 還有2個(gè)代理方法:通知將要發(fā)出去時(shí)調(diào)用,收到通知的response后調(diào)用。
14.UNNotificationServiceExtension.h
里面有兩個(gè)方法,收到通知的請(qǐng)求后調(diào)用, 系統(tǒng)將要銷毀時(shí)調(diào)用。
通知里面有UI相關(guān)的類 #import <UserNotificationsUI/UserNotificationsUI.h>
這個(gè)類里面就一個(gè)文件, 而且方法比較單一,就是收到通知調(diào)用,和收到通知的響應(yīng)調(diào)用。 其他方法也就是mediaPlay 和 mediaPause 。和一些多媒體播放的按鈕frame,color等, 這里面的作用難道僅僅就是通知來了后播放的音樂暫時(shí)暫停下,響一聲通知,再播放? 具體WWDC2016上說的鎖屏頁面的通知樣式處理的api是在下面的部件增強(qiáng)章節(jié)中。
Integrating with the Messages App 與系統(tǒng)短信 app交互
對(duì)消息額支持很大,可以模擬發(fā)消息收消息,發(fā)郵件等,提供了UI界面。 也提供了一些額外擴(kuò)展的api,如表情包區(qū)域。WWDC2016上說的各種消息內(nèi)的新操作在頭文件中都能找到Api。
此功能的頭文件入口在#import <Messages/Messages.h>
1.MSMessagesAppViewController.h
這個(gè)類應(yīng)該就是蘋果自己的消息界面,你可以繼承他寫你自己自定義的界面。 屬性有:activeConversation 指的是當(dāng)前的會(huì)話對(duì)象,是上面“2”這個(gè)類型,具體詳細(xì)可以看下面的第“2”點(diǎn)、還有個(gè)是presentationStyle(外觀樣式,枚舉類型,緊縮?擴(kuò)張?)。 接下來就是方法了:requestPresentationStyle(請(qǐng)求消息過渡到指定的樣式),dismiss消除方法。 然后就是一波生命周期方法了,每一類都有will和did,會(huì)話信息將要(已經(jīng))活躍時(shí),將要(已經(jīng))解除活躍,將要(已經(jīng))選擇信息,將要(已經(jīng))收到信息,將要(已經(jīng))開始發(fā)送,將要(已經(jīng))取消發(fā)送,將要(已經(jīng))開始過渡。
2.MSConversation.h
屬性有l(wèi)ocalParticipantIdentifier(當(dāng)前會(huì)話參與者生成的標(biāo)識(shí),他說只有刪了App才會(huì)變 姑且理解成id是不會(huì)變的),remoteParticipantIdentifiers(遠(yuǎn)端的標(biāo)識(shí)符數(shù)組),selectedMessage(選中的信息),以及4個(gè)對(duì)象方法 插入一條信息,插入一個(gè)標(biāo)簽,插入一段文本,插入一個(gè)附件。 這四個(gè)方法都有成功的回調(diào)。
3.MSSession.h
這個(gè)類里面是空的,解釋說是用session來處理消息序列間的關(guān)系。可能就是占個(gè)位,以后估計(jì)會(huì)添加?xùn)|西。 這個(gè)MSSession是后面很多參數(shù)的類型,應(yīng)該就是區(qū)分消息類似于標(biāo)識(shí)符的作用。
4.MSMessage.h
初始化方法是initWithSession ,沒錯(cuò)就是上面那個(gè)MSSession。 除了初始化方法剩下的就全是屬性了:session,senderParticipantIdentifier(發(fā)送者的標(biāo)識(shí)符),layout布局這個(gè)是“5”這個(gè)類型,URL,shouldExpire(選yes會(huì)自動(dòng)消失,用戶手動(dòng)選擇為這條消息續(xù)命),accessibilityLabel(殘疾人模式支持),error。
5.MSMessageLayout.h
這個(gè)是抽象類,里面是空的,就是個(gè)布局文件,繼承自NSObject。
6.MSMessageTemplateLayout.h
繼承上面那個(gè)類,看名字是模板布局后面應(yīng)該會(huì)用的挺多的,里面的屬性有,標(biāo)題,子標(biāo)題,尾部標(biāo)題,尾部子標(biāo)題,圖片,多媒體URL,圖片標(biāo)題,圖片子標(biāo)題。
7.MSSticker.h
應(yīng)該是消息上的表情包。 里面就有兩個(gè)屬性imageFileURL ,localizedDescription 圖片和局部描述。然后是帶上這兩個(gè)屬性的初始化方法 initWithContentsOfFileURL: localizedDescription: 。
8.MSStickerView.h
這個(gè)類就是一個(gè)view,里面包著一個(gè)sticker,也就是包裹著上面那個(gè)裝飾品的view。 提供了帶上sticker的初始化方法,一個(gè)常規(guī)屬性animationDuration,和三個(gè)方法startAnimating,stopAnimating,isAnimating。
9.MSStickerBrowserViewDataSource.h
細(xì)思極恐,這個(gè)類不就是wwdc2016上說的那個(gè)可以在消息下面添加自定義表情的地方么。 符合datasource的風(fēng)格,里面就兩個(gè)方法,numberOfStickersInStickerBrowserView: (返回一個(gè)總數(shù)),stickerBrowserView:stickerAtIndex:(返回這個(gè)索引下的內(nèi)容)。
10.MSStickerBrowserView.h
上面那個(gè)是datasource,那這個(gè)就是用了上面數(shù)據(jù)源的view唄。 除了初始化方法,有兩個(gè)屬性 stickerSize(枚舉,小,中,大),dataSource(就是上面的“9”),還有個(gè)人reloadData方法。
11.MSStickerBrowserViewController.h
上面是個(gè)view, 這個(gè)就是承載上面那個(gè)view的viewcontroller。肯定得有這個(gè)屬性stickerBrowserView 和初始化方法。
這個(gè)message模塊還有UI相關(guān)的api #import <MessageUI/MessageUI.h>
就是兩個(gè)VC ,MFMailComposeViewController,MFMessageComposeViewController。 這兩個(gè)都是繼承自UINavigationController. 覺得這兩個(gè)就是發(fā)郵件的編輯頁面,和發(fā)消息的編輯頁面。 發(fā)郵件的頁面里有 canSendMail (Bool方法),set主題,set發(fā)件人,set收件人,set內(nèi)容,set附件。 然后有一個(gè)代理,和代理方法,猜也能猜到 就是成功失敗回調(diào)。mailComposeController:didFinishWithResult: error: 。 那另一個(gè)消息和這差不多了就不說了。
Speech Recognition 語音識(shí)別轉(zhuǎn)文字
這個(gè)類里面的Api和方法調(diào)用都非常清晰,感覺使用起來會(huì)非常方便。真的為科大訊飛捏把汗了,科大訊飛的app(錄音寶)我看過,都還沒有說一段語音能直接轉(zhuǎn)文字的功能,他們是直接把聲音文件上傳,然后24小時(shí)候再發(fā)給你轉(zhuǎn)換后的結(jié)果...而且一上來就要收費(fèi)。蘋果的這個(gè)功能已經(jīng)做到了系統(tǒng)原生支持,真的厲害。
此功能的頭文件入口在#import <Speech/Speech.h>
1.SFSpeechRecognitionResult.h
這個(gè)類里有三個(gè)屬性:bestTranscription 就是最優(yōu)的轉(zhuǎn)化結(jié)果咯,是上面的“7”這個(gè)類型的。然后再看下這個(gè)SFTranscription.h ,果然不出所料 有兩個(gè)屬性 一個(gè)是字符串類型formattedString 一個(gè)是數(shù)組類型的segments ,恩 前者就是轉(zhuǎn)化后的字符串,后者是分割后的一個(gè)個(gè)小結(jié)果集合。 然后這個(gè)分割的一個(gè)個(gè)小結(jié)果呢又是上面“6”這個(gè)類型。那再看一下“6” 里面的屬性就是 substring, 時(shí)間戳,duration,準(zhǔn)確性,備選答案數(shù)組,這些很清晰的東西了。
2.SFSpeechRecognitionRequest.h
這個(gè)類里東西有點(diǎn)多,屬性taskHint,是上面“4”這個(gè)類型,點(diǎn)開一看就是一個(gè)枚舉,用來區(qū)分你這個(gè)語音識(shí)別的請(qǐng)求是哪一類的 查找?確認(rèn)?聽寫?無法識(shí)別?。 接下來是兩個(gè)BOOL類型的,shouldReportPartialResults(是否語音局部的一塊一塊也要處理?默認(rèn)選false就是一句話全說完了再上傳吧),detectMultipleUtterances(假如你說了10秒鐘,只有后5秒匹配到了結(jié)果,那你前面刪了還是保留?默認(rèn)不刪),然后是分析到的關(guān)鍵字?jǐn)?shù)組,和標(biāo)識(shí)符什么的。 然后這個(gè)request有兩個(gè)子類,一個(gè)是從本地URL讀取 一個(gè)聲音文件去識(shí)別, 一個(gè)是默認(rèn)做法用話筒和AVFoundation庫接收到聲音去識(shí)別,然后有幾個(gè)拼接聲音的API。
3.SFSpeechRecognitionTask.h
從名字就能看出來這是語音識(shí)別最重要的一個(gè)類了,里面的屬性有:state這是一個(gè)枚舉,說明當(dāng)前狀態(tài)是進(jìn)行中?已完成?被取消?等等。 接下來是三個(gè)常見的 isFinishing ,isCancelled ,error 。 接下來是 isPowerAvailable (是否開啟說話聲音大小的監(jiān)測(cè)?),peakPower(最大聲音),averagePower(平均聲音)。 屬性就這些了,接下來就是一個(gè)協(xié)議和一波代理方法:剛剛識(shí)別出話語調(diào)用,猜測(cè)話語時(shí)調(diào)用,話說完了調(diào)用,取消時(shí)調(diào)用,等等等,你能想到的回調(diào)方法蘋果應(yīng)該都有的。
4.上面第2條里面說過了
5.SFSpeechRecognizer.h
和系統(tǒng)的那些相機(jī)權(quán)限,通訊錄權(quán)限有點(diǎn)像, 就是現(xiàn)在的狀態(tài)是什么?同意?拒絕?還是未選擇過? 然后提供了方法讓用戶去選擇。 然后有些屬性:NSSet類型的supportedLocales(支持地區(qū)方言的集合),
available是否可用,locale當(dāng)前地區(qū) ,defaultTaskHint默認(rèn)類別,request(就是上面說的請(qǐng)求),隊(duì)列,代理。 然后有個(gè)協(xié)議和代理方法:發(fā)現(xiàn)用戶給與的權(quán)限發(fā)生改變時(shí)調(diào)用。
6和7. 上面第1條里說過了
Wide Color 寬域顏色
文檔的原話說:大多數(shù)的 core字打頭的圖形框架 還有AVFoundation 都大大提高了對(duì)擴(kuò)展像素和寬色域色彩空間的支持。通過圖形堆棧擴(kuò)展這種方式比以往支持廣色域的顯示設(shè)備更加容易?,F(xiàn)在對(duì)UIKit擴(kuò)展可以在sRGB的色彩空間下工作,性能更好,也可以在更廣泛的色域來搭配sRGB顏色。 然后說了幾個(gè)場(chǎng)景說建議你用sRGB吧,比如依賴于UIkit的clamp component values的應(yīng)用程序,或是使用較低級(jí)別api執(zhí)行自己圖像處理的 都建議用sRGB吧。
然后看了下UIColor類里 到底什么是sRGB? 發(fā)現(xiàn)多了兩個(gè)iOS10新增的api。
- (UIColor *)initWithDisplayP3Red:(CGFloat)displayP3Red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha NS_AVAILABLE_IOS(10_0); //董鉑然 博客園
細(xì)節(jié)都是一樣的就是一個(gè)類方法一個(gè)實(shí)例方法, 我理解下,就是說建議你們以前改用colorwithRGB的地方 現(xiàn)在都換成這個(gè)方法叭。可能大多數(shù)公司都抽成了 RGB(a,g,b,a)這種宏吧,那就在宏定義那改一下就好了?!?br />
Adapting to the True Tone Display 真彩色顯示
真彩色的顯示會(huì)根據(jù)光感應(yīng)器來進(jìn)行自動(dòng)的調(diào)節(jié)來達(dá)到特定環(huán)境下的顯示與性能平衡效果。 如果需要這個(gè)功能的話需要再info.plist里配置
UIWhitePointAdaptivityStyle
共有五種選擇:
1.UIWhitePointAdaptivityStyleStandard 標(biāo)準(zhǔn)
2.UIWhitePointAdaptivityStyleReading 閱讀
3.UIWhitePointAdaptivityStylePhoto 圖片
4.UIWhitePointAdaptivityStyleVideo 視頻
5.UIWhitePointAdaptivityStyleGame 游戲
然后他說的很清楚,如果你是圖片處理類的app,那就直接配stylePhoto吧,如果你是閱讀類的那就直接配styleReading吧。 這五個(gè)形式的顯示效果從上往下遞減,我理解是說在閱讀時(shí)給你最好的效果,但如果在游戲時(shí)也給那么好的效果會(huì)影響性能,就給你一個(gè)相對(duì)次一點(diǎn)的顯示效果讓性能更流暢。
App Search Enhancements 應(yīng)用搜索增強(qiáng)
iOS10的搜索功能做了一定增強(qiáng):應(yīng)用程序內(nèi)搜索,搜索傳遞,考慮私人差異,結(jié)果可視化。 使用CSSearchQuery類,調(diào)用Core Spotlight的api,可以讓你不必自己維護(hù)自己的搜索索引,關(guān)于對(duì)搜索關(guān)鍵字的處理,還有考慮到不同類別差異導(dǎo)致搜索結(jié)果的排序都是蘋果幫你處理。
并且搜索結(jié)果可以繼續(xù)往下傳遞,假設(shè)你用Core Spotlight搜索火車站,提示的是地圖類app搜索火車站的結(jié)果,你點(diǎn)進(jìn)去后,這個(gè)地圖類app會(huì)接收到“火車站”這個(gè)字段在應(yīng)用內(nèi)也完成搜索。支持此功能也是需要配置plist文件:key-value CoreSpotlightContinuation-YES,然后設(shè)置CSQueryContinuationActionType(#import<CoreSpotlight/CSSearchableItem.h>)。最后傳遞的搜索字符串用continueUserActivity:restorationHandler:方法接收。
然后現(xiàn)在看一下#import <CoreSpotlight/CSSearchQuery.h>頭文件里面的結(jié)構(gòu)。
看上去這個(gè)CSSearchQuery像是一個(gè)查詢語句操作,有創(chuàng)建,查詢成功和錯(cuò)誤等。初始化方法是initWithQueryString: attributes:。 有isCanceled屬性 和 cancel 和 start方法。 還有foundItemCount屬性,看上去是能夠得到搜索的結(jié)果個(gè)數(shù)。protectionClasses(數(shù)組),看上去像是隱私相關(guān)受保護(hù)的文件。 還有兩個(gè)block,一個(gè)是搜索結(jié)束后回調(diào),參數(shù)是NSError;一個(gè)是查詢到結(jié)果時(shí)回調(diào),參數(shù)是items數(shù)組。這個(gè)items數(shù)組都是CSSearchableItem類型,這里面有個(gè)attributeSet屬性,里面可以傳入以下類型
Widget Enhancements 鎖屏部件增強(qiáng)
現(xiàn)在鎖屏界面有了新的設(shè)計(jì),建議我們廢棄以前的notificationCenterVibrancyEffect 改用widgetPrimaryVibrancyEffect或者widgetSecondaryVibrancyEffect,并且窗口的小部件可以讓你描述有多少東西可用,支持緊湊和擴(kuò)展兩種形態(tài)。
這些新舊的Effect效果在這個(gè)類下,可能是之前鎖屏玩不出什么花樣所以大家沒怎么關(guān)注這里。
#import <NotificationCenter/NotificationCenter.h> 里面有三個(gè)頭文件
1.NCWidgetProviding.h
先來兩個(gè)方法
這個(gè)方法如果實(shí)現(xiàn)了,系統(tǒng)將在適當(dāng)?shù)臅r(shí)候召喚部件更新形態(tài),無論是在通知中心還是后臺(tái)。 需要啟用后臺(tái)更新功能,部件會(huì)在異步工作主線程更新,調(diào)用參數(shù)塊的工作完成后會(huì)得到相應(yīng)的結(jié)果。
這個(gè)方法應(yīng)該是部件變化時(shí)調(diào)用,參數(shù)是最大有多大。
這里聲明了一個(gè)分類UIVibrancyEffect (NCWidgetAdditions),里面就是本章節(jié)說的iOS10新增API
+ (UIVibrancyEffect *)widgetPrimaryVibrancyEffect NS_AVAILABLE_IOS(10_0);
+ (UIVibrancyEffect *)widgetSecondaryVibrancyEffect NS_AVAILABLE_IOS(10_0);
這兩個(gè)方法名字上是老大和老二,有什么區(qū)別? 都是用在選擇的文字或圖形上,默認(rèn)用上面,如果開啟了further diminution(應(yīng)該是類似于上面壓縮模式)就用下面的。
下面又聲明了一個(gè)分類NSExtensionContext (NCWidgetAdditions),里面也是iOS10的新增API
里面有兩個(gè)屬性 widgetLargestAvailableDisplayMode ,widgetActiveDisplayMode 。 是兩種顯示模式是NCWidgetDisplayMode枚舉類型,有緊縮和擴(kuò)張兩種。 ,估計(jì)假如是新聞通知一個(gè)是一般大小,一個(gè)是點(diǎn)開詳情的大小。 然后就是一個(gè)方法widgetMaximumSizeForDisplayMode ,返回值是CGSize取到播放模式的最大尺寸。
2.NCWidgetController.h
里面除了個(gè)初始化方法,還有一個(gè)方法
第一個(gè)參數(shù)默認(rèn)為yes,就是該展示時(shí)就展示,這個(gè)方法可以跨小組件間通訊,以及和providing app交互。
3.NCWidgetTypes.h
里面就一個(gè)枚舉類型NCWidgetDisplayMode ,前面第1點(diǎn)說過了。
Security and Privacy Enhancements 安全和保密性增強(qiáng)
安全方面在iOS10中引入了更多修改和補(bǔ)充,具體有以下幾點(diǎn):
1.在info.plist文件新增了一個(gè)key,NSAllowsArbitraryLoadsInWebContent,允許任意web頁面加載,同時(shí)蘋果會(huì)用ATS保護(hù)你的app。
2.使用改進(jìn)后的SecKey API 而不是過時(shí)的 CDSA API。
3.安全傳輸API中不再支持SSLv3, 建議你們盡快停用SHA1和3DES加密算法。
4.剪貼板的擴(kuò)展,因?yàn)閣wdc2016演示了可以跨設(shè)備復(fù)制粘貼啊,那肯定要做一些限制可見(#import <UIKit/UIPasteboard.h>)
5.這點(diǎn)最重要的,建議盡快適配, 所有和用戶權(quán)限相關(guān)的地方必須在info.plist里配置里面包括
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription
NSVoIPUsageDescription
雖然現(xiàn)在還沒有iOS10系統(tǒng)的手機(jī),但是我用模擬器試了下,親測(cè)如果我想喚起通訊錄但是沒有配置NSContactsUsageDescription,剛啟動(dòng)時(shí)不會(huì)崩潰,但是在喚起操作發(fā)生時(shí)會(huì)直接崩潰。 在info.plist設(shè)置之后就可以正常使用了。
本文是用筆者認(rèn)為比較清晰的結(jié)構(gòu)整理的,希望讀者也能有所幫助。 當(dāng)然里面也有一些地方是我自己的猜測(cè)和理解,不能保證100%正確,有不同而理解歡迎一起討論。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS如何利用一句話完成轉(zhuǎn)場(chǎng)動(dòng)畫
這篇文章主要給大家介紹了關(guān)于iOS如何利用一句話完成轉(zhuǎn)場(chǎng)動(dòng)畫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08iOS開發(fā)tips-UINavigationBar的切換效果
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)tips-UINavigationBar的切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11總結(jié)IOS關(guān)閉鍵盤/退出鍵盤的五種方式
IOS開發(fā)中經(jīng)常要用到輸入框,默認(rèn)情況下點(diǎn)擊輸入框就會(huì)彈出鍵盤,但是必須要實(shí)現(xiàn)輸入框return的委托方法才能取消鍵盤的顯示,對(duì)于用戶體驗(yàn)來說很不友好,我們可以實(shí)現(xiàn)例如點(diǎn)擊鍵盤以外的空白區(qū)域來將鍵盤關(guān)閉的功能,以下是我總結(jié)出的幾種關(guān)閉鍵盤的方法。2016-08-08使用Swift代碼實(shí)現(xiàn)iOS手勢(shì)解鎖、指紋解鎖實(shí)例詳解
這篇文章主要介紹了使用Swift代碼實(shí)現(xiàn)iOS手勢(shì)解鎖、指紋解鎖的實(shí)現(xiàn)過程,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-06-06