轉(zhuǎn)帖|行業(yè)資訊|編輯:龔雪|2015-09-30 11:02:37.000|閱讀 326 次
概述: iOS9新增加的觸摸機(jī)制3D Touch,可以帶給用戶輕按重按的不同觸摸體驗(yàn)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在iphone6s問世之前,朋友們都已經(jīng)知道新一代的蘋果會(huì)增加一項(xiàng)非常重要的功能—3D Touch,新品發(fā)布后很多果粉都爭(zhēng)先要體驗(yàn)3D Touch給用戶帶來的額外維度上的交互,這個(gè)設(shè)計(jì)之所以叫做3D Touch,其原理上是增加了一個(gè)壓力的感觸,通過區(qū)分輕按和重按來進(jìn)行不同的用戶交互,那么3D Touch到底是怎樣實(shí)現(xiàn)的呢?讓我們一起來學(xué)習(xí)一下。
3D Touch是一個(gè)很新穎的設(shè)計(jì),可是蘋果文檔有言:
With Xcode 7.0 you must develop on a device that supports 3D Touch. Simulator in Xcode 7.0 does not support 3D Touch.
看到這句話心是不是涼了一半,是的,xcode7是支持3D Touch開發(fā)的,可是模擬器并不支持這個(gè)手勢(shì),我們只能在真機(jī)上進(jìn)行學(xué)習(xí)與測(cè)試,但是在IT的世界,從來都不缺拯救世界的人物,github上有人為我們提供了這樣的一個(gè)插件,可以讓我們?cè)谀M器上進(jìn)行3D Touch的效果測(cè)試:
git地址:。
其實(shí)安裝和使用并不需要怎么介紹,git主頁里介紹的很清楚,這里在記錄一遍,其中只有一點(diǎn)需要注意,如果你像我一樣,電腦中裝有Xcode6和Xcode7兩個(gè)版本,那個(gè)Xcode的編譯路徑,需要做一下修改。
安裝:
在終端中一次運(yùn)行如下指令:
git clone //github.com/DeskConnect/SBShortcutMenuSimulator.git cd SBShortcutMenuSimulator make
如果電腦中有多個(gè)Xcode版本,先做如下操作,如果只有Xcode7,則可以跳過
sudo xcode-select -switch /Applications/Xcode2.app/Contents/Developer/
注意:上面命令中,Xcode2.app是你電腦中Xcode的名字,這里如要特別注意,如果名字中有空格,需要修改一下,把空格去掉,否則會(huì)影響命令的執(zhí)行。
之后在SBShortcutMenuSimulator的目錄中執(zhí)行如下操作:
xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT_LIBRARIES=$PWD/SBShortcutMenuSimulator.dylib xcrun simctl spawn booted launchctl stop com.apple.SpringBoard
如果沒有報(bào)錯(cuò),我們可以通過向指定端口發(fā)送消息的方法來在模擬器上模擬3D Touch的效果:
echo 'com.apple.mobilecal' | nc 127.0.0.1 8000
其中,com.apple.mobilecal是應(yīng)用的Bundle ID ,如果要測(cè)試我們的應(yīng)用,將其改為我們應(yīng)用的BundleID即可,上面的示例應(yīng)用是系統(tǒ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)用是我們可以通過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)用變得無比靈活方便,用戶可以不需付出尋找的時(shí)間成本來快速使用自己需要的功能。
第二部分是對(duì)app的一個(gè)優(yōu)化,用戶可以通過3D Touch手勢(shì)在view上來預(yù)覽一些預(yù)加載信息,這樣的設(shè)計(jì)可以使app更加簡(jiǎn)潔大方,交互性也更強(qiáng)。
在我們的app中使用3D Touch功能,主要分為以下三個(gè)模塊:
通過主屏幕的應(yīng)用Icon,我們可以用3D Touch呼出一個(gè)菜單,進(jìn)行快速定位應(yīng)用功能模塊相關(guān)功能的開發(fā)。如上面的日歷。
這個(gè)功能是一套全新的用戶交互機(jī)制,在使用3D Touch時(shí),ViewController中會(huì)有如下三個(gè)交互階段:
(1)提示用戶這里有3D Touch的交互,會(huì)使交互控件周圍模糊
(2)繼續(xù)深按,會(huì)出現(xiàn)預(yù)覽視圖
(3)通過視圖上的交互控件進(jìn)行進(jìn)一步交互
這個(gè)模塊的設(shè)計(jì)可以在網(wǎng)址連接上進(jìn)行網(wǎng)頁的預(yù)覽交互。
iOS9為我們提供了一個(gè)新的交互參數(shù):力度。我們可以檢測(cè)某一交互的力度值,來做相應(yīng)的交互處理。例如,我們可以通過力度來控制快進(jìn)的快慢,音量增加的快慢等。
iOS9為我們提供了兩種屏幕標(biāo)簽,分別是靜態(tài)標(biāo)簽和動(dòng)態(tài)標(biāo)簽。
靜態(tài)標(biāo)簽是我們?cè)陧?xiàng)目的配置plist文件中配置的標(biāo)簽,在用戶安裝程序后就可以使用,并且排序會(huì)在動(dòng)態(tài)標(biāo)簽的前面。
我們先來看靜態(tài)標(biāo)簽的配置:
首先,在info.plist文件中添加如下鍵值(我在測(cè)試的時(shí)候,系統(tǒng)并沒有提示,只能手打上去):
先添加了一個(gè)UIApplicationShortcutItems的數(shù)組,這個(gè)數(shù)組中添加的元素就是對(duì)應(yīng)的靜態(tài)標(biāo)簽,在每個(gè)標(biāo)簽中我們需要添加一些設(shè)置的鍵值:
必填項(xiàng)(下面兩個(gè)鍵值是必須設(shè)置的):
UIApplicationShortcutItemType 這個(gè)鍵值設(shè)置一個(gè)快捷通道類型的字符串
UIApplicationShortcutItemTitle 這個(gè)鍵值設(shè)置標(biāo)簽的標(biāo)題
選填項(xiàng)(下面這些鍵值不是必須設(shè)置的):
UIApplicationShortcutItemSubtitle 設(shè)置標(biāo)簽的副標(biāo)題
UIApplicationShortcutItemIconType 設(shè)置標(biāo)簽Icon類型
UIApplicationShortcutItemIconFile 設(shè)置標(biāo)簽的Icon文件
UIApplicationShortcutItemUserInfo 設(shè)置信息字典(用于傳值)
我們?nèi)缟辖貓D設(shè)置后,運(yùn)行程序,用我們前面的方法進(jìn)行測(cè)試,效果如下:
動(dòng)態(tài)標(biāo)簽是我們?cè)诔绦蛑校ㄟ^代碼添加的,與之相關(guān)的類,主要有三個(gè):
UIApplicationShortcutItem 創(chuàng)建3DTouch標(biāo)簽的類
UIMutableApplicationShortcutItem 創(chuàng)建可變的3DTouch標(biāo)簽的類
UIApplicationShortcutIcon 創(chuàng)建標(biāo)簽中圖片Icon的類
因?yàn)檫@些類是iOS9中新增加的類,所以其api的復(fù)雜程度并不大,下面我們來對(duì)其中方法與屬性進(jìn)行簡(jiǎn)要講解:
@interface UIApplicationShortcutItem : NSObject <NSCopying, NSMutableCopying> //下面是兩個(gè)初始化方法 通過設(shè)置type,title等屬性來創(chuàng)建一個(gè)標(biāo)簽,這里的icon是UIApplicationShortcutIcon對(duì)象,我們后面再說 - (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<NSString *, id <NSSecureCoding>> *userInfo;
//這個(gè)類繼承于 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<NSString *, id <NSSecureCoding>> *userInfo;
@end
//這個(gè)類創(chuàng)建標(biāo)簽中的icon
@interface UIApplicationShortcutIcon : NSObject <NSCopying>
//創(chuàng)建系統(tǒng)風(fēng)格的icon
+ (instancetype)iconWithType:(UIApplicationShortcutIconType)type;
//創(chuàng)建自定義的圖片icon
+ (instancetype)iconWithTemplateImageName:(NSString *)templateImageName;
@end
- (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];
}
效果如下:
這里,將系統(tǒng)風(fēng)格icon的枚舉列舉如下:
typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) { UIApplicationShortcutIconTypeCompose,//編輯的圖標(biāo) UIApplicationShortcutIconTypePlay,//播放圖標(biāo) UIApplicationShortcutIconTypePause,//暫停圖標(biāo) UIApplicationShortcutIconTypeAdd,//添加圖標(biāo) UIApplicationShortcutIconTypeLocation,//定位圖標(biāo) UIApplicationShortcutIconTypeSearch,//搜索圖標(biāo) UIApplicationShortcutIconTypeShare//分享圖標(biāo) } NS_ENUM_AVAILABLE_IOS(9_0);
類似推送,當(dāng)我們點(diǎn)擊標(biāo)簽進(jìn)入應(yīng)用程序時(shí),也可以進(jìn)行一些操作,我們可以看到,在applocation中增加了這樣一個(gè)方法:
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0);
當(dāng)我們通過標(biāo)簽進(jìn)入app時(shí),就會(huì)在appdelegate中調(diào)用這樣一個(gè)回調(diào),我們可以獲取shortcutItem的信息進(jìn)行相關(guān)邏輯操作。
這里有一點(diǎn)需要注意:我們?cè)赼pp的入口函數(shù):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
也需要進(jìn)行一下判斷,在launchOptions中有UIApplicationLaunchOptionsShortcutItemKey這樣一個(gè)鍵,通過它,我們可以區(qū)別是否是從標(biāo)簽進(jìn)入的app,如果是則處理結(jié)束邏輯后,返回NO,防止處理邏輯被反復(fù)回調(diào)。
幾點(diǎn)注意:
1、快捷標(biāo)簽最多可以創(chuàng)建四個(gè),包括靜態(tài)的和動(dòng)態(tài)的。
2、每個(gè)標(biāo)簽的題目和icon最多兩行,多出的會(huì)用...省略
關(guān)于3DTouch在UIView中的預(yù)覽功能和UITouch中新增加的力度屬性的應(yīng)用,因?yàn)椴缓醚菔荆@里就不再總結(jié),大家可以通過頭文件中相應(yīng)的類和屬性來了解他們,最后希望大家多多學(xué)習(xí),把3DTouch技術(shù)運(yùn)用在自己的作品中去。
本文轉(zhuǎn)載自開源中國(guó)—琿少
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn