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便可,上面的示例应用是系统日历:

相关文章
相关标签/搜索