ios開發3D touch

1.模擬器touch 效果git下載連接:https://github.com/DeskConnect/SBShortcutMenuSimulator

前一陣子伴隨著蘋果發布新產品iPhone6s 和 IOS9新系統,一系列關于硬件和軟件的新功能、新特性逐漸進入iPhone用戶的視線。這次我們就來講講傳聞已久的3D Touch。? ? ? ? 當然這個新功能不僅僅需要手機系統更新到最新的IOS9系統,更需要設備必須是iPhone6s及以上。哈哈哈。。。所以,這個功能目前也只能是iPhone6s的用戶才能體驗到??偟膩碚f蘋果推出3D Touch這個功能的目的和去年推出IOS8的時候推出擴展today的目的是一樣:增加APP的快捷入口,方便和簡化用戶進入APP相應功能的路徑,讓用戶更快的找到自己需要的應用功能。蘋果官方文檔對3D Touch的說明是這樣的:

[plain] view plain copy

1. With iOS 9, new iPhone models add a third dimension to the user interface.??

2.??

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

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

?? 意思大概是這樣的:? ? ??

1、用戶可以通過3D Touch手勢,按壓主屏幕上的應用Icon,可以直接進入應用的相應的功能模塊。(手機桌面上APP相應模塊的快捷入口)? ? ?

?2、用戶可以通過3D Touch手勢,按壓對應的視圖來預覽視圖的更多內容。(視圖信息的快速預覽)? ? ? 光靠上面的文字描述確實顯得很蒼白抽象。那么我們來看一下國內一些主流APP對于3D Touch功能的具體應用。? ? ?

?就拿QQ來說,關于第一條說明的應用場景如下圖的:? ? ? ?


?我們可以通過一定力度按壓桌面上QQ應用的圖標,就可以出現一個快捷操作的視圖??梢钥焖龠M入“掃一掃”或者“加好友”等其他模塊。? ? ? ??

關于第二條說明的應用場景如下圖的:??

? ? ? ? ? ? ? ? ? ? ? ??

在消息的列表頁面,用力按壓某一條對話消息,就可以預覽這條對話消息的具體內容。? ? ? ??

看完了具體的應用場景,我們一定很好奇這個3D Touch功能到底是怎么實現?其實3D Touch的實現一點也不復雜,相對于IOS8推出的today來說簡單很多,基本不需要太多的代碼操作。我們可以通過兩個方式來實現3D Touch。? ? ? ??

1、通過設置標簽:在項目的info.plist文件設置相應的標簽就基本上可以完成大體工作了!? ? ? ??

2、通過代碼的方式配置3D Touch。? ? ? ?

?那么我們先來看一下代碼方式是如何實現的:? ? ??

? IOS9為 UIApplication類新增了一個屬性shortcutItems來統一設置和管理應用的 3D Touch功能。

[objc] view plain copy

1. @class UIApplicationShortcutItem;??

2. @interface UIApplication (UIShortcutItems)??

3. // Register shortcuts to display on the home screen, or retrieve currently registered shortcuts.?

?4. @property (nullable, nonatomic, copy) NSArray*shortcutItems NS_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;

5. @end

屬性?shortcutItems是一個數組類型的數據,數組里面的數據是 ?UIApplicationShortcutItem類的對象。

UIApplicationShortcutItem類也是IOS9為配置3D Touch而新增的類。也許我們已經猜到了,一個UIApplicationShortcutItem對象就是在桌面長按應用Icon彈窗視圖中的一個欄目。也就是上面“掃一掃”欄目的入口。同時UIApplication類還新增了一個代理方法來處理3D Touch對應的手勢操作。

[objc] view plain copy

1. //?Called?when?the?user?activates?your?application?by?selecting?a?shortcut?on?the?home?screen,

2. //?except?when?-application:willFinishLaunchingWithOptions:?or?-application:didFinishLaunchingWithOptions?returns?NO.

3. -?(void)application:(UIApplication?*)application?performActionForShortcutItem:(UIApplicationShortcutItem?*)shortcutItem?completionHandler:(void(^)(BOOL?succeeded))completionHandler?NS_AVAILABLE_IOS(9_0)?__TVOS_PROHIBITED;

具體的代碼實現:

[objc] view plain copy

?-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions?{

? ?//?Override?point?for?customization?after?application?launch.


? ?//欄目1

? ? UIApplicationShortcutIcon?*icon1?=?[UIApplicationShortcutIcon?iconWithType:UIApplicationShortcutIconTypeCompose];

? ?UIApplicationShortcutItem?*item1?=?[[UIApplicationShortcutItem?alloc]?initWithType:@"item1"?localizedTitle:@"入口1"?localizedSubtitle:@"入口1副標題"?icon:icon1?userInfo:nil];


? ?//欄目2

? ? UIApplicationShortcutIcon?*icon2?=?[UIApplicationShortcutIcon?iconWithType:UIApplicationShortcutIconTypePlay];

? ?UIApplicationShortcutItem?*item2?=?[[UIApplicationShortcutItem?alloc]?initWithType:@"item2"?localizedTitle:@"入口2"?localizedSubtitle:@"入口2副標題"?icon:icon2?userInfo:nil];


? //欄目3

? ? UIApplicationShortcutIcon?*icon3?=?[UIApplicationShortcutIcon?iconWithType:UIApplicationShortcutIconTypePause];

? ? UIApplicationShortcutItem?*item3?=?[[UIApplicationShortcutItem?alloc]?initWithType:@"item3"?localizedTitle:@"入口3"?localizedSubtitle:@"入口3副標題"?icon:icon3?userInfo:nil];


? ?//欄目4

? ?UIApplicationShortcutIcon?*icon4?=?[UIApplicationShortcutIcon?iconWithType:UIApplicationShortcutIconTypeAdd];

? ?UIApplicationShortcutItem?*item4?=?[[UIApplicationShortcutItem?alloc]?initWithType:@"item4"?localizedTitle:@"入口4"?localizedSubtitle:@"入口4副標題"?icon:icon4?userInfo:nil];


? ? //設置?shortcutItems???需要注意的是shortcutItems數組最多只能加入四個item,超過四個只會顯示前面的四個

? ?application.shortcutItems?=?@[item1,?item2,?item3,?item4];


? ? return?YES;

?}

[objc] view plain copy

?#pragma?mark?-??3D?Touch?代理方法

-(void)application:(UIApplication?*)application?performActionForShortcutItem:(UIApplicationShortcutItem?*)shortcutItem?completionHandler:(void?(^)(BOOL))completionHandler{

? ? ?//根據Item對應的type標識處理對應的點擊操作

? ?NSString?*itemType?=?shortcutItem.type;

? ?if([@"item1"?isEqualToString:itemType]){


? ? }

? ? else?if([@"item2"?isEqualToString:itemType]){


? ? }

? ?else?if?([@"item3"?isEqualToString:itemType]){


? ? }

? ?else?if?([@"item4"?isEqualToString:itemType]){


? ?}

? }

其中,UIApplicationShortcutIcon類就是設置每一個item項目的圖標,這個圖標可以是系統的圖標也可以是自定義的圖標。該類提供兩個初始化方法來供我們選擇:iconWithType:方法設置系統圖標 ,iconWithTemplateImageName:方法設置自定義圖標。具體的使用可以去查看該類的API。

UIApplicationShortcutItem類中的幾個屬性需要說明一下。Type屬性是用來標識每一個item項目的,通過這個標識我們可以區分點擊相應的每一項該觸發哪些操作(在3D Touch的代理方法中就是靠Type屬性來區分點擊的是哪一項)。localizedTitle屬性是每一個item的標題。localizedSubtitle屬性是每個item的副標題,這個副標題可有可無。icon屬性也就是上面說的每個item對應的圖標了。userInfo屬性是信息字典,用于傳值,這里設為空。

需要注意的是,根據本人的試驗:?UIApplication類的shortcutItems數組最多只能放四個item。也就是說通過3D Touch按壓桌面應用Icon彈出的操作視圖,該視圖里面最多只能有四個快捷入口選項。超過四個只能顯示最前面的四個。

到這里我們就通過代碼的方式實現了3D Touch功能了。

下面講一下通過設置標簽的形式實現3D Touch功能。我們只需要設置靜態標簽然后在UIApplication類中實現3D Touch的代理方法就可以了,靜態標簽是我們在項目的配置plist文件中配置的標簽,只要設置好對應的標簽和鍵值對就沒問題。


上面的代碼實現的應用效果如下圖:

上面的代碼實現的應用效果如下圖:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一:主屏幕按壓應用圖標展示快捷選項 注意:應用最多有4個快捷選項標簽。 1.靜態標簽 1-打開項目的plist文...
    瘋狂小魚人閱讀 712評論 0 1
  • 專著:http://www.lxweimin.com/p/3443a3b27b2d 1.簡單的介紹一下3D Touc...
    violafa閱讀 1,029評論 1 0
  • 3D Touch介紹 從iPhone 6s開始,產品都添加了一項硬件屬性,叫做3D touch。作為屏幕的一部分,...
    歪筆書生_閱讀 628評論 0 0
  • 3D Touch 概述: 從.Net轉來也快有半年之多了,從小生到現在也算是經歷了無所bug了,不過還是打到不了I...
    LitterL閱讀 710評論 8 1
  • 這就是 iOS SpringBoard 上用力點按 App Icon 彈出的快捷操作菜單了。此類菜單分為兩類,靜態...
    請叫我周小帥閱讀 806評論 0 1