3DTouch_IOS開發(fā)與應(yīng)用

3-DTouch_IOS

對集成3DTouch的簡單講解

Demo下載地址:https://github.com/ShaoGitHub/3-DTouch_IOS

自從iPhone6s推出以后驼抹,其最大的亮點(diǎn)無疑就是最新攜帶的3DTouch功能。這項(xiàng)技術(shù)不僅給各個應(yīng)用增加更多方便快捷的入口赡麦,其產(chǎn)品本身的交互體驗(yàn)也是超級酷炫霜大,而且最重要的姻成,蘋果不僅推出該功能拓提,還開放其API的調(diào)用接口等限,這對廣大iOS開發(fā)者來說真是福音啊屋彪,不像之前iPhone5s推出的指紋解鎖功能鹉胖,要隔段好久才開放API接口握玛,可見蘋果對這項(xiàng)新功能的推廣之心之迫切够傍。閑話少說,本文就iOS開發(fā)中如何集成3DTouch做下簡單的講解挠铲。

開發(fā)環(huán)境及調(diào)試設(shè)備:
Xcode7或以上冕屯,iOS9或以上,iPhone6s或以上

3DTouch功能主要分為兩大塊:主屏幕Icon上的快捷標(biāo)簽(Home Screen Quick Actions)拂苹; Peek(預(yù)覽)和Pop(跳至預(yù)覽的詳細(xì)界面)

Home Screen Quick Actions的實(shí)現(xiàn)

主屏幕icon上的快捷標(biāo)簽的實(shí)現(xiàn)方式有兩種安聘,一種是在工程文件info.plist里靜態(tài)設(shè)置,另一種是代碼的動態(tài)實(shí)現(xiàn).


靜態(tài)設(shè)置

靜態(tài)設(shè)置方式如下圖所示:


demo.png

下面是各個標(biāo)簽類型的說明瓢棒,plist文件里還沒提供UIApplicationShortcutItems選項(xiàng)浴韭,沒辦法,只能手動敲了脯宿,或者直接復(fù)制粘貼過去念颈。
UIApplicationShortcutItems:數(shù)組中的元素就是我們的那些快捷選項(xiàng)標(biāo)簽。
UIApplicationShortcutItemTitle:標(biāo)簽標(biāo)題(必填)
UIApplicationShortcutItemType:標(biāo)簽的唯一標(biāo)識 (必填)
UIApplicationShortcutItemIconType:使用系統(tǒng)圖標(biāo)的類型连霉,如搜索榴芳、定位、home等(可選)
UIApplicationShortcutItemIcon File:使用項(xiàng)目中的圖片作為標(biāo)簽圖標(biāo) (可選)
UIApplicationShortcutItemSubtitle:標(biāo)簽副標(biāo)題 (可選)
UIApplicationShortcutItemUserInfo:字典信息跺撼,如傳值使用 (可選)


動態(tài)實(shí)現(xiàn)

動態(tài)設(shè)置方式如下所示:</br>

//動態(tài)創(chuàng)建應(yīng)用圖標(biāo)上的3D touch快捷選項(xiàng)
- (void)creatShortcutItem
{
    UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"com.test.shequ" localizedTitle:@"社區(qū)" localizedSubtitle:@"開啟心聲,展望全新世界" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeHome] userInfo:@{}];
    
    [UIApplication sharedApplication].shortcutItems = @[item1];
}

到此窟感,主屏幕icon上的快捷標(biāo)簽創(chuàng)建就介紹完了,而他們點(diǎn)擊進(jìn)入頁面的實(shí)現(xiàn)就有點(diǎn)類似消息通知的實(shí)現(xiàn)方式了歉井,只要增加兩處代碼就好:首次啟動APP和APP沒被殺死從后臺啟動柿祈。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    ViewController *vc = [[ViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
    
    //動態(tài)創(chuàng)建應(yīng)用圖標(biāo)上的3D touch快捷選項(xiàng)
    [self creatShortcutItem];
    UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
    if (shortcutItem) {
        //判斷設(shè)置的快捷選項(xiàng)標(biāo)簽唯一標(biāo)識,根據(jù)不同標(biāo)識執(zhí)行不同操作
        if([shortcutItem.type isEqualToString:@"com.test.shengyou"]){
            NSLog(@"新啟動APP-- 聲優(yōu)界面");
            HallViewController *sayuView = [[HallViewController alloc] init];
            [[self topViewController].navigationController pushViewController:sayuView animated:YES];
        } else if ([shortcutItem.type isEqualToString:@"com.test.shequ"]) {
            //進(jìn)入搜索界面
            NSLog(@"新啟動APP-- 社區(qū)界面");
        }
        return NO;
    }
    
    return YES;
}

- (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler
{
    NSLog(@"%@",shortcutItem.userInfo);
    if (shortcutItem) {
        //判斷設(shè)置的快捷選項(xiàng)標(biāo)簽唯一標(biāo)識哩至,根據(jù)不同標(biāo)識執(zhí)行不同操作
        if([shortcutItem.type isEqualToString:@"com.xys.shengyou"]){
            NSLog(@"新啟動APP-- 聲優(yōu)界面");
            HallViewController *sayuView = [[HallViewController alloc] init];
            [[self topViewController].navigationController pushViewController:sayuView animated:YES];
        } else if ([shortcutItem.type isEqualToString:@"com.xys.shequ"]) {
            //進(jìn)入搜索界面
            NSLog(@"新啟動APP-- 社區(qū)界面");
        }
    }
    
    if (completionHandler) {
        completionHandler(YES);
    }
}

Peek和Pop的實(shí)現(xiàn)-四部曲

  • 注冊(在哪個頁面上使用該功能就注冊在哪個頁面上)
    [self registerForPreviewingWithDelegate:self sourceView:self.view];
  • 繼承協(xié)議UIViewControllerPreviewingDelegate

      @interface HallViewController ()<UIViewControllerPreviewingDelegate>
    
  • 實(shí)現(xiàn)UIViewControllerPreviewingDelegate方法

      //peek(預(yù)覽)
     - (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
     {
         //獲取按壓的cell所在行谍夭,[previewingContext sourceView]就是按壓的那個視圖
         //NSIndexPath *indexPath = [_myTableView indexPathForCell:(UITableViewCell* )[previewingContext sourceView]];
    
        //設(shè)定預(yù)覽的界面
        MyPreviewingViewController *childVC = [[MyPreviewingViewController alloc] init];
        childVC.preferredContentSize = CGSizeMake(0.0f,500.0f);
        childVC.myStr = [NSString stringWithFormat:@"我是%@,用力按一下進(jìn)來-------",@"白紙上涂鴉"];
    
        //調(diào)整不被虛化的范圍,按壓的那個cell不被虛化(輕輕按壓時周邊會被虛化憨募,再少用力展示預(yù)覽,再加力跳頁至設(shè)定界面)
        //CGRect rect = CGRectMake(0, 0, self.view.frame.size.width,40);
        CGRect rect = self.view.frame;
        previewingContext.sourceRect = rect;
        //返回預(yù)覽界面
        return childVC;
    }
    
    //pop(按用點(diǎn)力進(jìn)入)
    - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
        //    [self.view addSubview:viewControllerToCommit.view];
        [self showViewController:viewControllerToCommit sender:self];
    }
    
  • 當(dāng)彈出預(yù)覽時袁辈,上滑預(yù)覽視圖菜谣,出現(xiàn)預(yù)覽視圖中快捷選項(xiàng)

    - (NSArray<id<UIPreviewActionItem>> *)previewActionItems {
       // setup a list of preview actions
        UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"刪除" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    
            //        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"你點(diǎn)了-刪除" message:nil delegate:nil cancelButtonTitle:@"確定" otherButtonTitles: nil];
            //        [alert show];
        }];
    
        UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"置頂" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
            //        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"你點(diǎn)了-置頂" message:nil delegate:nil cancelButtonTitle:@"確定" otherButtonTitles: nil];
            //        [alert show];
        }];
    
        UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"啥也不干" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    
            //        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"真的啥也不干?" message:nil delegate:nil cancelButtonTitle:@"確定" otherButtonTitles: nil];
            //        [alert show];
        }];
        NSArray *actions = @[action1,action2,action3];
    
        // and return them (return the array of actions instead to see all items ungrouped)
        return actions;
    }
    

到此晚缩,3DTouch在APP中的集成就先介紹這些尾膊,3DTouch中還有個重要的屬性--壓力屬性(force 和 maximumPossibleForce)這里就不詳細(xì)介紹了,感興趣的同學(xué)可以去看下官方文檔荞彼,網(wǎng)上也很多相關(guān)資料冈敛。以上有說的不對的地方,還望高手指正鸣皂,相互學(xué)習(xí)抓谴,共同進(jìn)步.

Demo下載地址:https://github.com/ShaoGitHub/3-DTouch_IOS
我的簡書地址:http://www.reibang.com/u/e0c475eb47e9

喜歡的記得打賞關(guān)注一下哦!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暮蹂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子癌压,更是在濱河造成了極大的恐慌仰泻,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滩届,死亡現(xiàn)場離奇詭異集侯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帜消,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門棠枉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泡挺,你說我怎么就攤上這事辈讶。” “怎么了粘衬?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵荞估,是天一觀的道長。 經(jīng)常有香客問我稚新,道長勘伺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任褂删,我火速辦了婚禮飞醉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屯阀。我一直安慰自己缅帘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布难衰。 她就那樣靜靜地躺著钦无,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盖袭。 梳的紋絲不亂的頭發(fā)上失暂,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音鳄虱,去河邊找鬼弟塞。 笑死,一個胖子當(dāng)著我的面吹牛拙已,可吹牛的內(nèi)容都是我干的决记。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼倍踪,長吁一口氣:“原來是場噩夢啊……” “哼系宫!你這毒婦竟也來了索昂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤笙瑟,失蹤者是張志新(化名)和其女友劉穎楼镐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體往枷,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡框产,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了错洁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秉宿。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屯碴,靈堂內(nèi)的尸體忽然破棺而出描睦,到底是詐尸還是另有隱情,我是刑警寧澤导而,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布忱叭,位于F島的核電站,受9級特大地震影響今艺,放射性物質(zhì)發(fā)生泄漏韵丑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一虚缎、第九天 我趴在偏房一處隱蔽的房頂上張望撵彻。 院中可真熱鬧,春花似錦实牡、人聲如沸陌僵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碗短。三九已至,卻和暖如春题涨,著一層夾襖步出監(jiān)牢的瞬間豪椿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工携栋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咳秉。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓婉支,卻偏偏與公主長得像,于是被迫代替她去往敵國和親澜建。 傳聞我的和親對象是個殘疾皇子向挖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

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