iOS9 3D touch 適配開(kāi)發(fā)

1. 3D Touch的主要應(yīng)用

官方文檔給出的應(yīng)用介紹主要有兩塊:

1.A user can now press your Home screen icon to immediately access functionality provided by your app.

2.Within your app, a user can now press views to see previews of additional content and gain accelerated access to features.

第一部分的應(yīng)用是我們可以通過(guò)3D手勢(shì),在主屏幕上的應(yīng)用Icon處俱济,直接進(jìn)入應(yīng)用的響應(yīng)功能模塊奠宜。這個(gè)功能就例如我們上面的日歷示例,會(huì)在Icon旁邊出現(xiàn)一個(gè)菜單,點(diǎn)擊菜單我們可以進(jìn)入相應(yīng)的功能單元垃僚。

我個(gè)人理解霸妹,這個(gè)功能,push消息功能加上iOS8推出的擴(kuò)展today功能揭保,這三個(gè)機(jī)制使iOS應(yīng)用變得無(wú)比靈活方便肥橙,用戶可以不需付出尋找的時(shí)間成本來(lái)快速使用自己需要的功能。

第二部分是對(duì)app的一個(gè)優(yōu)化秸侣,用戶可以通過(guò)3D Touch手勢(shì)在view上來(lái)預(yù)覽一些預(yù)加載信息存筏,這樣的設(shè)計(jì)可以使app更加簡(jiǎn)潔大方,交互性也更強(qiáng)味榛。

2. 3D Touch的三大模塊

在我們的app中使用3D Touch功能椭坚,主要分為以下三個(gè)模塊:

1、Home Screen Quick Actions

通過(guò)主屏幕的應(yīng)用Icon搏色,我們可以用3D Touch呼出一個(gè)菜單善茎,進(jìn)行快速定位應(yīng)用功能模塊相關(guān)功能的開(kāi)發(fā)。如上面的日歷频轿。

2垂涯、peek and pop

這個(gè)功能是一套全新的用戶交互機(jī)制,在使用3D Touch時(shí)航邢,ViewController中會(huì)有如下三個(gè)交互階段:

(1)提示用戶這里有3D Touch的交互耕赘,會(huì)使交互控件周?chē):?/p>

(2)繼續(xù)深按,會(huì)出現(xiàn)預(yù)覽視圖

(3)通過(guò)視圖上的交互控件進(jìn)行進(jìn)一步交互

這個(gè)模塊的設(shè)計(jì)可以在網(wǎng)址連接上進(jìn)行網(wǎng)頁(yè)的預(yù)覽交互膳殷。

3.Force Properties

iOS9為我們提供了一個(gè)新的交互參數(shù):力度操骡。我們可以檢測(cè)某一交互的力度值,來(lái)做相應(yīng)的交互處理秽之。例如当娱,我們可以通過(guò)力度來(lái)控制快進(jìn)的快慢,音量增加的快慢等考榨。

靜態(tài)3Dtouch 在info.plist中配置

必填項(xiàng)(下面兩個(gè)鍵值是必須設(shè)置的):

UIApplicationShortcutItemType?這個(gè)鍵值設(shè)置一個(gè)快捷通道類(lèi)型的字符串

UIApplicationShortcutItemTitle?這個(gè)鍵值設(shè)置標(biāo)簽的標(biāo)題

選填項(xiàng)(下面這些鍵值不是必須設(shè)置的):

UIApplicationShortcutItemSubtitle?設(shè)置標(biāo)簽的副標(biāo)題

UIApplicationShortcutItemIconType?設(shè)置標(biāo)簽Icon類(lèi)型

UIApplicationShortcutItemIconFile ?設(shè)置標(biāo)簽的Icon文件

② 動(dòng)態(tài)在?appdelegate 中實(shí)現(xiàn)

動(dòng)態(tài)標(biāo)簽是我們?cè)诔绦蛑校ㄟ^(guò)代碼添加的河质,與之相關(guān)的類(lèi)震叙,主要有三個(gè):

UIApplicationShortcutItem?創(chuàng)建3DTouch標(biāo)簽的類(lèi)

UIMutableApplicationShortcutItem?創(chuàng)建可變的3DTouch標(biāo)簽的類(lèi)

UIApplicationShortcutIcon?創(chuàng)建標(biāo)簽中圖片Icon的類(lèi)

因?yàn)檫@些類(lèi)是iOS9中新增加的類(lèi)散休,所以其api的復(fù)雜程度并不大媒楼,下面我們來(lái)對(duì)其中方法與屬性進(jìn)行簡(jiǎn)要講解:

@interface?UIApplicationShortcutItem?:?NSObject?

//下面是兩個(gè)初始化方法?通過(guò)設(shè)置type,title等屬性來(lái)創(chuàng)建一個(gè)標(biāo)簽戚丸,這里的icon是UIApplicationShortcutIcon對(duì)象,我們后面再說(shuō)

-?(instancetype)initWithType:(NSString?*)type?localizedTitle:(NSString?*)localizedTitle?localizedSubtitle:(nullable?NSString?*)localizedSubtitle?icon:(nullable?UIApplicationShortcutIcon?*)icon?userInfo:(nullable?NSDictionary?*)userInfo?NS_DESIGNATED_INITIALIZER;

-?(instancetype)initWithType:(NSString?*)type?localizedTitle:(NSString?*)localizedTitle;

//下面這是一些只讀的屬性夺颤,獲取相應(yīng)的屬性值

@property?(nonatomic,?copy,?readonly)?NSString?*type;

@property?(nonatomic,?copy,?readonly)?NSString?*localizedTitle;

@property?(nullable,?nonatomic,?copy,?readonly)?NSString?*localizedSubtitle;

@property?(nullable,?nonatomic,?copy,?readonly)?UIApplicationShortcutIcon?*icon;

@property?(nullable,?nonatomic,?copy,?readonly)?NSDictionary>?*userInfo;

//這個(gè)類(lèi)繼承于?UIApplicationShortcutItem,創(chuàng)建的標(biāo)簽可變

@interface?UIMutableApplicationShortcutItem?:?UIApplicationShortcutItem

@property?(nonatomic,?copy)?NSString?*type;

@property?(nonatomic,?copy)?NSString?*localizedTitle;

@property?(nullable,?nonatomic,?copy)?NSString?*localizedSubtitle;

@property?(nullable,?nonatomic,?copy)?UIApplicationShortcutIcon?*icon;

@property?(nullable,?nonatomic,?copy)?NSDictionary>?*userInfo;

@end

//這個(gè)類(lèi)創(chuàng)建標(biāo)簽中的icon

@interface?UIApplicationShortcutIcon?:?NSObject?

//創(chuàng)建系統(tǒng)風(fēng)格的icon

+?(instancetype)iconWithType:(UIApplicationShortcutIconType)type;

//創(chuàng)建自定義的圖片icon

+?(instancetype)iconWithTemplateImageName:(NSString?*)templateImageName;

@end

創(chuàng)建好標(biāo)簽后胁勺,將其添加如application的hortcutItems數(shù)組中即可世澜,示例如下:

-?(void)viewDidLoad?{

[super?viewDidLoad];

//?Do?any?additional?setup?after?loading?the?view,?typically?from?a?nib.

//創(chuàng)建

UIApplicationShortcutItem?*?item?=?[[UIApplicationShortcutItem?alloc]initWithType:@"two"localizedTitle:@"第二個(gè)標(biāo)簽"localizedSubtitle:@"看我哦"icon:[UIApplicationShortcutIcon?iconWithType:UIApplicationShortcutIconTypePlay]?userInfo:nil];

//添加

[UIApplication?sharedApplication].shortcutItems?=?@[item];

}

也可以在appdelegate 中寫(xiě)

UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon1"];

UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon2"];

UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"iCon3"];

// create several (dynamic) shortcut items

UIMutableApplicationShortcutItem

*item1 = [[UIMutableApplicationShortcutItem

alloc]initWithType:@"com.test.dynamic" localizedTitle:@"Dynamic

Shortcut" localizedSubtitle:@"available after first launch" icon:icon1

userInfo:nil];

UIMutableApplicationShortcutItem

*item2 = [[UIMutableApplicationShortcutItem

alloc]initWithType:@"com.test.deep1" localizedTitle:@"Deep Link 1"

localizedSubtitle:@"Launch Nav Controller" icon:icon2 userInfo:nil];

UIMutableApplicationShortcutItem

*item3 = [[UIMutableApplicationShortcutItem

alloc]initWithType:@"com.test.deep2" localizedTitle:@"Deep Link 2"

localizedSubtitle:@"Launch 2nd Level" icon:icon3 userInfo:nil];

// add all items to an array

NSArray *items = @[item1, item2, item3];

// add this array to the potentially existing static UIApplicationShortcutItems

NSArray *existingItems = [UIApplication sharedApplication].shortcutItems;

NSArray *updatedItems = [existingItems arrayByAddingObjectsFromArray:items];

[UIApplication sharedApplication].shortcutItems = updatedItems;

- (void)application:(UIApplication *)application

performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem

completionHandler:(void (^)(BOOL))completionHandler

在控制器中pop peek

首先控制器該繼承UIViewControllerPreviewingDelegate應(yīng)該判斷該控制器當(dāng)前是否實(shí)現(xiàn)了3dtouch手勢(shì) 如果實(shí)現(xiàn)的話最好禁用長(zhǎng)按手勢(shì) (如果你的添加了該手勢(shì)的話)

if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {

[self registerForPreviewingWithDelegate:(id)self sourceView:self.view];

NSLog(@"3D Touch is available! Hurra!");

// no need for our alternative anymore

self.longPress.enabled = NO;

} else {

NSLog(@"3D Touch is not available on this device. Sniff!");

// handle a 3D Touch alternative (long gesture recognizer)

self.longPress.enabled = YES;

}

點(diǎn)擊進(jìn)入預(yù)覽模式: 實(shí)現(xiàn)該協(xié)議方法

- (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location

繼續(xù)按壓進(jìn)入:實(shí)現(xiàn)該協(xié)議

- (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit

預(yù)覽模式上拉實(shí)現(xiàn) :

我們預(yù)覽模式下上拉 出現(xiàn)一個(gè)視圖 ?該視圖類(lèi) apple提供了?UIPreviewAction 該類(lèi)來(lái)實(shí)現(xiàn)寥裂,調(diào)用

UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"Action 1 triggered");

}];

回調(diào)中實(shí)現(xiàn)你要操作的行為

這個(gè)方法在 - (NSArray> *)previewActionItems ?中返回action 的數(shù)組

有趣的是?如果我們對(duì)action 繼續(xù)包裝一個(gè)數(shù)組 還是可以的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末封恰,一起剝皮案震驚了整個(gè)濱河市络拌,隨后出現(xiàn)的幾起案子回溺,更是在濱河造成了極大的恐慌,老刑警劉巖遗遵,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件车要,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡翼岁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)悉患,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)榆俺,“玉大人坞淮,你說(shuō)我怎么就攤上這事陪捷。” “怎么了啡直?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵苍碟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我阐滩,道長(zhǎng)县忌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任装获,我火速辦了婚禮厉颤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘逼友。我一直安慰自己,他們只是感情好司抱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布黎烈。 她就那樣靜靜地躺著,像睡著了一般资溃。 火紅的嫁衣襯著肌膚如雪烈炭。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天梳庆,我揣著相機(jī)與錄音,去河邊找鬼驻售。 笑死,一個(gè)胖子當(dāng)著我的面吹牛欺栗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播消请,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼类腮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了缸逃?” 一聲冷哼從身側(cè)響起厂抽,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昭殉,沒(méi)想到半個(gè)月后藐守,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吃靠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年足淆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了礁阁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丹鸿,死狀恐怖棚品,靈堂內(nèi)的尸體忽然破棺而出廊敌,到底是詐尸還是另有隱情门怪,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布肋殴,位于F島的核電站坦弟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏酿傍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一修陡、第九天 我趴在偏房一處隱蔽的房頂上張望可霎。 院中可真熱鬧,春花似錦癣朗、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至签孔,卻和暖如春窘行,著一層夾襖步出監(jiān)牢的瞬間饥追,已是汗流浹背罐盔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捏顺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓劫窒,卻偏偏與公主長(zhǎng)得像昌执,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子懂拾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 一岖赋、屏幕圖標(biāo)使用3D Touch創(chuàng)建快速進(jìn)入入口: 1、與之相關(guān)的類(lèi): (1)唐断、 UIApplicationSho...
    尋形覓影閱讀 714評(píng)論 0 0
  • 專(zhuān)著:http://www.reibang.com/p/3443a3b27b2d 1.簡(jiǎn)單的介紹一下3D Touc...
    violafa閱讀 1,015評(píng)論 1 0
  • 1.簡(jiǎn)單的介紹一下3D Touch 3D Touch的觸控技術(shù)脸甘,被蘋(píng)果稱(chēng)為新一代多點(diǎn)觸控技術(shù)。其實(shí)钝的,就是此前在Ap...
    Camille_chen閱讀 12,057評(píng)論 19 33
  • 五一是堂妹出嫁的日子枚荣。這天叔叔家上上下下一片熱鬧喜慶。叔叔家兩層樓房上下各兩間衙伶,西邊還有間平房是廚房呼畸,房前是一個(gè)四...
    一生愨閱讀 354評(píng)論 0 0
  • 協(xié)議 OC中的協(xié)議和接口有些相似,協(xié)議中定義的方法蛮原,在類(lèi)中實(shí)現(xiàn)另绩。協(xié)議一般情況下是用來(lái)實(shí)現(xiàn)委托對(duì)象花嘶。委托對(duì)象一般用來(lái)...
    司徒新新閱讀 198評(píng)論 0 0