3DTouch分爲三個內容:git
1. 在點擊app icon 的手長按而且用力一點,就會出現 幾個Item。
github
2.(1)在app 裏面長按也要用力往下壓,就會能夠彈出一個自定義的 ViewController。這個時候若是你放手了那麼就會消失。數組
(2)若是長按往下壓彈出了自定義的ViewController 以後,接着往上移動,就能夠出現選擇Action。xcode
3. 若是長按往下壓彈出了自定義的ViewController,而後更加用力一點按壓, 那麼就會至關於push 進來了。app
1、主屏靜態和動態快速選項測試
1. 在 Info.plist文件裏靜態添加快速選項動畫
先添加了一個UIApplicationShortcutItems的數組,這個數組中添加的元素就是對應的靜態標籤,在每一個標籤中咱們須要添加一些設置的鍵值:spa
必填項(下面兩個鍵值是必須設置的):debug
UIApplicationShortcutItemType 快捷通道類型的字符串,處理點擊事件事時的惟一標識,用於區分item3d
UIApplicationShortcutItemTitle 這個鍵值設置標籤的標題
選填項(下面這些鍵值不是必須設置的):
UIApplicationShortcutItemSubtitle 設置標籤的副標題
UIApplicationShortcutItemIconType 設置標籤Icon類型
UIApplicationShortcutItemIconFile 設置標籤的Icon文件
UIApplicationShortcutItemUserInfo 設置信息字典(用於傳值)
2.動態添加快速選項
例如:
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"icon_register.png"];
NSDictionary *info1 = @{@"scheme":@"devzeng://register"};
UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@"com.devzeng.registerPage" localizedTitle:@"註冊" localizedSubtitle:@"註冊新用戶" icon:icon1 userInfo:info1];
NSArray *shortcutItems=[[NSArray alloc]initWithObjects:item1,item2, nil];
[UIApplication sharedApplication].shortcutItems = shortcutItems;
注:最多可添加4個。
最後,使用這個方法來處理3dtouch點擊事件,包括跳轉至哪一個界面
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
2、peek (預覽)
彈出懸浮的controller時,按壓事件是加在該controller上的
首先判斷設備是否支持3DTouch
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
{
NSLog(@"3D Touch 可用!");
}
else
{
NSLog(@"3D Touch 無效");
}
若是支持,則註冊delegate,此處的delegate是UIViewControllerPreviewingDelegate,是按壓controller的代理
[self registerForPreviewingWithDelegate:self sourceView:self.view];
3.實現代理,並作相應的處理,彈出懸浮
-(UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
if ([self.presentedViewController isKindOfClass:[彈出懸浮controller class]]) {
return nil;
}
彈出懸浮controller *con = [[彈出懸浮controller alloc] init];
return con;
}
4.添加向上滑動懸浮controller時從底下出來的action,這個是要添加到懸浮controller類裏的
-(NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"收藏" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"click");
}];
//想要顯示多個就定義多個 UIPreviewAction
NSArray *actions = @[action1];
return actions;
}
3、pop (詳閱)
仍是UIViewControllerPreviewingDelegate代理方法,添加在最初按壓的controller上
//全屏展現方法,無關緊要,只是加上的話全屏展現時動畫更流暢
-(void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
[self showViewController:viewControllerToCommit sender:self];
}
4、SBShortcutMenuSimulator的安裝和使用
在終端中一次運行以下指令:
1
2
3
|
git clone https:
//github
.com
/DeskConnect/SBShortcutMenuSimulator
.git
cd
SBShortcutMenuSimulator
make
|
若是電腦中有多個Xcode版本,先作以下操做,若是隻有Xcode7,則能夠跳過
1
|
sudo
xcode-
select
-switch
/Applications/Xcode2
.app
/Contents/Developer/
|
注意:上面命令中,Xcode2.app是你電腦中Xcode的名字,這裏如要特別注意,若是名字中有空格,須要修改一下,把空格去掉,不然會影響命令的執行。
以後在SBShortcutMenuSimulator的目錄中執行以下操做:
1
2
|
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
|
若是沒有報錯,咱們能夠經過向指定端口發送消息的方法來在模擬器上模擬3D Touch的效果:
1
|
echo
'com.apple.mobilecal'
|
nc
127.0.0.1 8000
|
其中,com.apple.mobilecal是應用的Bundle ID ,若是要測試咱們的應用,將其改成咱們應用的BundleID便可,上面的示例應用是系統日曆: