3D Touch官方文檔翻譯筆記

iOS 9之后提供以下幾個(gè)3D Touch API:

1.Home screen quick action 主屏幕快速訪問(wèn) 最多四個(gè)

2.UIKit peek and pop 應(yīng)用內(nèi)peek哀托、pop迄靠,提供了應(yīng)用內(nèi)的一個(gè)對(duì)觸住的壓力感應(yīng)的替代方法

3.Web view peek and pop 讓你可以預(yù)覽HTML鏈接指定的網(wǎng)頁(yè)

4.UITouch force properties讓你可以自定義app基于壓力的交互

不論你使用哪一個(gè)API,你都要在runtime的時(shí)候檢查3D Touch是否可用蛛株。

一蜘犁、檢查3D Touch是否可用
  如果當(dāng)前對(duì)象遵循UITraitEnvironment協(xié)議(UIScreen翰苫、UIWindow、UIViewController这橙、UIPresentationController奏窑、UIView),檢查self.traitCollection.forceTouchCapability屈扎,它有三個(gè)值:

1.UIForceTouchCapabilityUnknown(3D Touch狀態(tài)未知埃唯,例如,你創(chuàng)建了一個(gè)view但是你還沒(méi)有將它加入到你的視圖層級(jí)中助隧,就會(huì)處于這個(gè)狀態(tài))

2.UIForceTouchCapabilityUnavailable(3D Touch不可用)

3.UIForceTouchCapabilityAvailable(3D Touch可用)

如果用戶(hù)在app運(yùn)行的時(shí)候關(guān)閉了3D Touch筑凫,可以在UITraitEnvironment協(xié)議中的traitCollectionDidChange:代理方法監(jiān)測(cè)到變化,具體寫(xiě)法如下:

- (void) traitCollectionDidChange: (UITraitCollection *) previousTraitCollection

 {

     [super traitCollectionDidChange: previousTraitCollection];

     if (self.traitCollection.forceTouchCapability!=previousTraitCollection.forceTouchCapability)

     {

      // your custom implementation here

       }

}

為了保障所有用戶(hù)都能體驗(yàn)到app的特性并村,根據(jù)3D Touch的支持情況配置不同的代碼巍实。可用的時(shí)候使用3D Touch哩牍,不可用的時(shí)候使用UILongPressGestureRecognizer類(lèi)棚潦。

二、Home Screen Quick Actions

iOS 9支持主屏幕靜態(tài)和動(dòng)態(tài)的quick actions:

(1)靜態(tài)quick actions:你的app安裝完成后即可使用膝昆。在你的info.plist中定義UIApplicationShortCutItems數(shù)組丸边。
  每個(gè)item字典的鍵有以下幾種:
  1.UIApplicationShortcutItemType(必要)根據(jù)這一個(gè)值來(lái)判斷你選的是哪一個(gè)quick action
  2.UIApplicationShortcutItemTitle(必要)quick action的名字,如果該字符串過(guò)長(zhǎng)并且沒(méi)有設(shè)置subtitle荚孵,會(huì)以?xún)尚姓故久媒眩€是不夠的話末尾會(huì)變?yōu)槭÷蕴?hào)
  3.UIApplicationShortcutItemSubtitle 副標(biāo)題,會(huì)在主標(biāo)題下面顯示收叶,主標(biāo)題不論多長(zhǎng)都會(huì)以一行顯示骄呼,副標(biāo)題過(guò)長(zhǎng)會(huì)以一行顯示,末位是省略號(hào)判没。
  4.UIApplicationShortcutItemIconType 提供一些系統(tǒng)的圖標(biāo)
  5.UIApplicationShortcutItemIconFile 從app bundle或者asset catalog中選擇一張圖片蜓萄,要求方形,35X35點(diǎn)坐標(biāo)澄峰,retina 屏幕是70 x 70像素嫉沽,plus是104 x 104像素,設(shè)置了這個(gè)值俏竞,系統(tǒng)會(huì)忽略UIApplicationShortcutItemIconType
  6.UIApplicationShortcutItemUserInfo 一個(gè)可選的绸硕,app定義的字典堂竟,這個(gè)字典的一個(gè)作用是提供app的版本,如果用戶(hù)安裝了你的app臣咖,按壓icon會(huì)先顯示靜態(tài)quick actions跃捣,啟動(dòng)之后如果還有空位才會(huì)顯示動(dòng)態(tài)quick actions,如果用戶(hù)更新了app但還沒(méi)有啟動(dòng)夺蛇,動(dòng)態(tài)quick action還是顯示的上一個(gè)版本的疚漆,在這個(gè)字典中添加版本信息可以解決這個(gè)問(wèn)題。(具體如何實(shí)現(xiàn)刁赦?猜測(cè)是自己加入一個(gè)版本號(hào)字段娶聘,在代碼中判斷版本號(hào),符合的話再加入)

(2)動(dòng)態(tài)quick actions:首次啟動(dòng)后可用甚脉。使用UIapplicationShortcutItem丸升,UIMutableApplicationShortcutItem,UIApplicaitionShortcutIcon定義主屏幕的動(dòng)態(tài)quick action牺氨。使用UIApplication的shortcutItems屬性添加動(dòng)態(tài)quick actions狡耻。使用系統(tǒng)定義圖片調(diào)用UIApplicationShortcutIcon的iconWithType:方法,自定義圖片使用iconWithTemplateImageName:猴凹。

系統(tǒng)首先按照UIApplicationShortCutItems定義的靜態(tài)quick actions的順序展示夷狰,如果還有空余位置,再展示動(dòng)態(tài)quick actions郊霎。
  <small><small><small>當(dāng)用戶(hù)選擇了一個(gè)主界面quick action沼头,系統(tǒng)會(huì)調(diào)用application:performActionForShortcutItem:completionHandler:方法,但是注意书劝,系統(tǒng)會(huì)在調(diào)用application:performActionForShortcutItem:completionHandler之前調(diào)用application:willFinishLaunchingWithOptions:和application:didFinishLaunchingWithOptions:进倍,所以如果quick action使你的app顯示的界面不一樣的話(本來(lái)打開(kāi)你的app會(huì)進(jìn)入View A,但是使用quick action會(huì)進(jìn)入View B)购对,這時(shí)候就要在兩個(gè)launch方法中處理quick action猾昆,UIApplicationShortcutItem存在于launchOptions的UIApplicationLaunchOptionsShortcutItemKey中,處理完成后骡苞,返回NO毡庆,系統(tǒng)就不會(huì)再調(diào)用application:performActionForShortcutItem:completionHandler:。</small></small></small>

三烙如、UIKit Peek、Pop

1.Peek 當(dāng)用戶(hù)按壓一個(gè)特定視圖時(shí)彈出的一個(gè)的視圖預(yù)覽功能毅否,除此之外亚铁,還可以添加一些quick actions,這些quick actions可以在peek彈出式向上滑動(dòng)調(diào)出螟加。
通過(guò)在要顯示的viewController中設(shè)置previewActionItems數(shù)組添加徘溢,如下:

-(NSArray> *)previewActionItems

{

  UIPreviewAction *p1 = [UIPreviewAction actionWithTitle:@"選項(xiàng)1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

                        [FireflyAlertView showWithTitle:@"提示" message:@"選項(xiàng)1" buttonTitle:@"確定"];

                         }];

   UIPreviewAction *p2 = [UIPreviewAction actionWithTitle:@"選項(xiàng)2" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

                         [FireflyAlertView showWithTitle:@"提示" message:@"選項(xiàng)2" buttonTitle:@"確定"];

                         }];

   UIPreviewAction *p3 = [UIPreviewAction actionWithTitle:@"選項(xiàng)3" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

                        [FireflyAlertView showWithTitle:@"提示" message:@"選項(xiàng)3" buttonTitle:@"確定"];

                        }];

    return @[p1,p2,p3];

}

2.Pop 當(dāng)用戶(hù)在peek后再次重壓吞琐,則會(huì)繼續(xù)預(yù)覽這個(gè)視圖并導(dǎo)向這個(gè)視圖。
  視圖控制器如果想使用3D Touch然爆,必須遵循UIViewControllerPreviewingDelegate協(xié)議站粟,并使用以下方法注冊(cè)

- (id)registerForPreviewingWithDelegate:(id)delegatesourceView:(UIView *)sourceView;

第一個(gè)參數(shù)填寫(xiě)當(dāng)前視圖控制器,self曾雕,第二個(gè)參數(shù)填寫(xiě)當(dāng)前視圖控制器的view奴烙。

UIViewControllerPreviewingDelegate協(xié)議中有兩個(gè)方法,都是必須實(shí)現(xiàn)

1.- (UIViewController *)previewingContext:(id)previewingContextviewControllerForLocation:(CGPoint)location;

第一個(gè)參數(shù)由系統(tǒng)自己創(chuàng)建剖张,注意這個(gè)協(xié)議不能在自定義的類(lèi)中遵循切诀,通過(guò)這個(gè)類(lèi)可以獲取以下四個(gè)屬性

1.sourceRect 最初重壓時(shí)不變模糊的區(qū)域

2.previewingGestureRecognizerForFailureRelationship 通過(guò)一個(gè)遵循UIGestureRecognizerDelegate協(xié)議的代理對(duì)象來(lái)使用這個(gè)手勢(shì),這個(gè)協(xié)議的方法可以讓你在其他手勢(shì)失敗后再執(zhí)行peek搔弄,或者同時(shí)開(kāi)始識(shí)別等幅虑。(沒(méi)有找到具體如何使用,知道的朋友歡迎補(bǔ)充)

3.delegate

4.sourceView

第二個(gè)參數(shù)用來(lái)標(biāo)明是哪個(gè)坐標(biāo)位置的控件要使用peek&pop顾犹。

2.-(void)previewingContext:(id)previewingContextcommitViewController:(UIViewController *)viewControllerToCommit

在這個(gè)方法中實(shí)現(xiàn)pop的時(shí)候是如何顯示view controller的倒庵,showViewController:sender:(普通的方式),presentViewController:animated:completion:(動(dòng)畫(huà)+完成回調(diào))

四炫刷、Web View Peek and Pop

在UIWebView和WKWebView中有一個(gè)屬性allowsLinkPreview擎宝,設(shè)置為YES則可以在任意鏈接上使用peek和pop。

在SFSafariViewController中自動(dòng)支持柬唯。(此處咱不介紹SFSafariViewController)

五认臊、Force Properties in UITouch Objects

UITouch有兩個(gè)新的屬性—force和maximumPossibleForce,可以讓你在所有的UIEvent中檢測(cè)和響應(yīng)壓力锄奢。(估計(jì)跟Apple pencil相關(guān)的app會(huì)用到)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末失晴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拘央,更是在濱河造成了極大的恐慌涂屁,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灰伟,死亡現(xiàn)場(chǎng)離奇詭異拆又,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)栏账,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)帖族,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挡爵,你說(shuō)我怎么就攤上這事竖般。” “怎么了茶鹃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵涣雕,是天一觀的道長(zhǎng)艰亮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)挣郭,這世上最難降的妖魔是什么迄埃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮兑障,結(jié)果婚禮上侄非,老公的妹妹穿的比我還像新娘。我一直安慰自己旺垒,他們只是感情好彩库,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著先蒋,像睡著了一般骇钦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竞漾,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天眯搭,我揣著相機(jī)與錄音,去河邊找鬼业岁。 笑死鳞仙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笔时。 我是一名探鬼主播棍好,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼允耿!你這毒婦竟也來(lái)了借笙?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤较锡,失蹤者是張志新(化名)和其女友劉穎业稼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蚂蕴,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡低散,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骡楼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熔号。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸟整,靈堂內(nèi)的尸體忽然破棺而出跨嘉,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布祠乃,位于F島的核電站,受9級(jí)特大地震影響兑燥,放射性物質(zhì)發(fā)生泄漏亮瓷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一降瞳、第九天 我趴在偏房一處隱蔽的房頂上張望嘱支。 院中可真熱鬧,春花似錦挣饥、人聲如沸除师。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汛聚。三九已至,卻和暖如春短荐,著一層夾襖步出監(jiān)牢的瞬間倚舀,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工忍宋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痕貌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓糠排,卻偏偏與公主長(zhǎng)得像舵稠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子入宦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 前言 關(guān)于3D touch蘋(píng)果官方文檔是這么開(kāi)始介紹的: 大意如下:iOS9開(kāi)始哺徊,所有新的手機(jī)都增加了一個(gè)三維的用...
    VV木公子閱讀 2,218評(píng)論 3 39
  • 前言 關(guān)于這篇文章 由于iPhone 6S發(fā)布不到一年的時(shí)間,很多新特性云石、新技術(shù)還未普遍唉工,不管是3D Touch的...
    Tangentw閱讀 4,480評(píng)論 8 18
  • 3D Touch 給iOS9的用戶(hù)一個(gè)維度的交互。在支持的設(shè)備上汹忠,人們能夠在主屏幕界面通過(guò)按壓應(yīng)用程序圖標(biāo)淋硝,快速的...
    Jack__yang閱讀 591評(píng)論 0 2
  • 1.簡(jiǎn)單的介紹一下3D Touch 3D Touch的觸控技術(shù),被蘋(píng)果稱(chēng)為新一代多點(diǎn)觸控技術(shù)宽菜。其實(shí)谣膳,就是此前在Ap...
    Camille_chen閱讀 12,046評(píng)論 19 33
  • 專(zhuān)著:http://www.reibang.com/p/3443a3b27b2d 1.簡(jiǎn)單的介紹一下3D Touc...
    violafa閱讀 1,013評(píng)論 1 0