iOS擴(kuò)展新特性之3DTouch開發(fā)

3D Touch是在iPhone6s之后且系統(tǒng)是iOS9以上才能使用的功能,詳情見(jiàn)官方文檔
https://developer.apple.com/library/prerelease/content/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/index.html#//apple_ref/doc/uid/TP40016543
3D Touch總的來(lái)說(shuō)分如下兩種
(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)用icon彈出的快捷菜單肋殴,另一種是在應(yīng)用里面,按壓view彈出另一個(gè)視圖堤如,再深按一次可push到另一個(gè)頁(yè)面。

一、Home Screen Quick Actions(按壓應(yīng)用圖標(biāo))
在info.plist文件里添加一項(xiàng)UIApplicationShortcutItems零蓉,這是個(gè)數(shù)組篮幢,里面添加任意項(xiàng)大刊,Item0里面的三項(xiàng)分別是圖片名稱、文本內(nèi)容三椿、類型缺菌,在AppDelegate里是根據(jù)這個(gè)類型跳轉(zhuǎn)到指定頁(yè)的。


屏幕快照 2017-01-19 17.49.33.png

在AppDelegate如下方法里實(shí)現(xiàn)跳轉(zhuǎn)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation


 if (articleType == kTypeAttetion) {
    [self.tabbar setTabBarSelectedWithIndex:kTabbarTypeAttention];
} else {
    [self.tabbar setTabBarSelectedWithIndex:kTabbarTypeHome];
}
HBBaseNavController *nc = (HBBaseNavController *)self.tabbar.selectedViewController;
[nc popToRootViewControllerAnimated:YES];

UIViewController *vc = [[UIViewController alloc] init];
  [nc pushViewController:vc animated:YES];

跳轉(zhuǎn)的時(shí)候要注意的是搜锰,先讓TabBarViewController跳轉(zhuǎn)到指定Tab伴郁,再讓這個(gè)Tab下的NavigationController 回到根視圖(popToRootViewController),然后再push到對(duì)應(yīng)的ViewController里去蛋叼。

二焊傅、Peek and Pop(彈出一個(gè)視圖和push到一個(gè)新的頁(yè)面)

1.注冊(cè)事件
如果是在一個(gè)tableview上實(shí)現(xiàn)這個(gè)功能,則需要在cellForRow里面去注冊(cè)這個(gè)事件狈涮,

if (IOS9_OR_LATER) {
    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        if (!cell.hasRegister3DTouch) {
            [[self viewController] registerForPreviewingWithDelegate:HBTouchDelegate sourceView:cell];
            cell.hasRegister3DTouch = YES;
        }
    }
}

這里面有兩點(diǎn)重要的處理:

*第一點(diǎn)是關(guān)于這個(gè)cell是否被注冊(cè)過(guò)狐胎,由于tableview的cell是復(fù)用的,所以只注冊(cè)一遍即可歌馍,否則在列表上拉加載幾屏后會(huì)出現(xiàn)嚴(yán)重的卡頓握巢。

*第二點(diǎn)是這個(gè)View所屬ViewController的代理指向問(wèn)題,如果有多個(gè)列表松却,每個(gè)列表里都要注冊(cè)這個(gè)代理暴浦,這樣每個(gè)列表里都要實(shí)現(xiàn)這個(gè)代理的方法溅话,同樣的方法要寫很多遍,這明顯不符合我們編程簡(jiǎn)潔歌焦、高效的宗旨飞几,所以可以把代理的實(shí)現(xiàn)抽象成一個(gè)類,然后注冊(cè)時(shí)將代理指向這個(gè)類(在上面代碼中指的是HBTouchDelegate独撇,實(shí)現(xiàn)的就是UIViewControllerPreviewingDelegate的兩個(gè)代理方法)屑墨。

2.實(shí)現(xiàn)代理方法
#pragma mark - UIViewControllerPreviewingDelegate
- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {

UIView *sourceCell = [previewingContext sourceView];
if (![[sourceCell viewController].presentedViewController isKindOfClass:[HBPeekViewController class]]) {
    HBPeekViewController *peekViewController = [HBPeekViewController new];
 peekViewController.preferredContentSize = CGSizeMake(0, 300);//這個(gè)是彈出視圖的寬高,默認(rèn)是屏幕寬高
    return peekViewController;
 } else {
    return nil;
}
}

- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit NS_AVAILABLE_IOS(9_0) {
[[[previewingContext sourceView] viewController] jumpWithArticleEntity:(HBArticleEntity *)self.touchEntity];
}

3.peekViewController中給彈出的視圖添加一些快捷操作券勺,點(diǎn)贊绪钥、收藏、對(duì)上面的文字進(jìn)行復(fù)制等等关炼,只要在previewActionItems方法程腹,創(chuàng)建UIPreviewAction到數(shù)組中,可以在UIPreviewAction的block里實(shí)現(xiàn)對(duì)應(yīng)的操作即可

- (NSArray<id<UIPreviewActionItem>>*)previewActionItems {
// 生成UIPreviewAction
 UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"贊" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
         //do something  
 }];

UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"看全文" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
   //do something
}];

UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"收藏" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
   //do something
 }];
 NSArray *group = nil;
 group = @[action1, action2, action3];
 return group;
}

到這里3DTouch主要的幾點(diǎn)就講完啦儒拂!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寸潦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子社痛,更是在濱河造成了極大的恐慌见转,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒜哀,死亡現(xiàn)場(chǎng)離奇詭異斩箫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)撵儿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門乘客,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人淀歇,你說(shuō)我怎么就攤上這事易核。” “怎么了浪默?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵牡直,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我纳决,道長(zhǎng)碰逸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任阔加,我火速辦了婚禮花竞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己约急,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布苗分。 她就那樣靜靜地躺著厌蔽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摔癣。 梳的紋絲不亂的頭發(fā)上奴饮,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音择浊,去河邊找鬼戴卜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛琢岩,可吹牛的內(nèi)容都是我干的投剥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼担孔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼江锨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起糕篇,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啄育,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拌消,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挑豌,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年墩崩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氓英。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泰鸡,死狀恐怖债蓝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盛龄,我是刑警寧澤饰迹,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站余舶,受9級(jí)特大地震影響啊鸭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匿值,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一赠制、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦钟些、人聲如沸烟号。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)汪拥。三九已至,卻和暖如春篙耗,著一層夾襖步出監(jiān)牢的瞬間迫筑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工宗弯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脯燃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓蒙保,卻偏偏與公主長(zhǎng)得像辕棚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子追他,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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