3DTouch學習筆記

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上的

  1. 首先判斷設備是否支持3DTouch

    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
        {
            NSLog(@"3D Touch  可用!");
        }
        else
        {
            NSLog(@"3D Touch 無效");
        }

  2.  若是支持,則註冊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便可,上面的示例應用是系統日曆:

相關文章
相關標籤/搜索