3DTouch攻略

作者: GiantAxe77 | 来源:发表于2016-09-08 20:07 被阅读780次

3DTouch概览

  • 备受瞩目的6s6s Plus上市以来,3DTouch也进入了人们的视线.它主要有如下图所示的几个用途👇:
3DTouch.png

是不是看起来很炫酷吊炸天哈哈哈?

亲们先来预览下效果图哈:

酷炫吊炸天3DTouch
这里给出官方链接:API资料 查阅资料

Quick Actions用法

  • 用法步骤so easy.
    • 第一步,在APPDelegateapplication:didFinishLaunchingWithOptions:方法里码代码.
    • 第二步,在APPDelegate类写3DTouch对应的代理application:performActionForShortcutItem:completionHandler:方法.
  • 废话不多说,直接上代码.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    // 首先判断是否支持3DTouch
    if(self.window.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
    {
        [self setup3DTouch:application];
    }
    return YES;
}

- (void)setup3DTouch:(UIApplication *)app
{
    // 设置图标icon (UIApplicationShortcutIconTypeMarkLocation为系统提供的样式之一)
    UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMarkLocation];

    // 设置shortcutItem
    //
    // type : 唯一标识
    // localizedTitle : 标题
    // localizedSubtitle : 子标题
    // icon : 图标
    // userInfo : 传递的字典
    UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"item1" localizedTitle:@"Sweet" localizedSubtitle:@"honey" icon:icon1 userInfo:nil];
    
    UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCloud];
    UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"item2" localizedTitle:@"Super" localizedSubtitle:@"me" icon:icon2 userInfo:nil];
    
    UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeMessage];
    UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"item3" localizedTitle:@"Legend" localizedSubtitle:@"logo" icon:icon3 userInfo:nil];
    
    // 加入到shortcutItems数组中
    app.shortcutItems = @[item1, item2, item3];
}

#pragma mark - UIApplicationDelegate

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
    if([shortcutItem.type isEqualToString:@"item1"])
    {
        NSLog(@"to do sth...");
    }
    
}
  • 实现出来的效果如图:
效果图.jpeg
  • 或者可以使用info.plist静态添加3DTouch,方法更是easy,直接上图:
静态添加3DTouch按钮.png

Peek and Pop用法

  • 简单介绍: 经过授权的应用的试图控制器可以响应用户不同的按压力量,随着按压力量的增加,会有三个交互阶段:
    • 暗示预览功能可用,会有一个虚化的效果.
    • ** Peek**:展示预览的视图以及快捷选项菜单(peek quick action).
    • Pop:跳转到预览的视图控制器.
  • 使用步骤:
    • 第一步,首先要判断设备是否支持3DTouch,并且要判断在运行环境改变的情况下3DTouch是否可用.
    • ** 第二步**,遵守UIViewControllerPreviewingDelegate代理,实现代理的2个方法.
    • ** 第三步,给响应Peek&Pop**手势的视图进行注册.
    • 最后一步, 向上滑动预览视图的时候,在视图下方可以展示一些选项去操作,可以通过在预览视图控制器中添加previewActionItems来实现.
  • 来,不说废话,代码,走起!
#pragma mark - life cycle

//页面一进来最好先判断下3DTouch是否可用,不可用就尴尬了😆
- (void)viewWillAppear:(BOOL)animated{
     [super viewWillAppear:animated];
      if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
      {
          NSLog(@"do sth");
      }
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 给响应Peek&Pop手势的视图进行注册,这里是给一个imageView进行注册😋
    [self registerForPreviewingWithDelegate:self sourceView:self.imgView];

}

#pragma mark - 3DTouch

// Called when the iOS interface environment changes.
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
{   // 环境变化时判断3DTouch是否可用
    if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)
    {
        NSLog(@"do sth");
    }
}

#pragma mark - UIViewControllerPreviewingDelegate

- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
    // 通过上下文可以调整不被虚化的范围
    previewingContext.sourceRect = CGRectMake(10, 10, 10, 10);
    
    // 预览控制器是我的另外一个控制器😆
    AXEParticleViewController *vc = [AXEParticleViewController new];
    return vc;
}

- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
    // 这个相当于push操作,push到预览的控制器
    [self showViewController:viewControllerToCommit sender:self];
}

#pragma mark - 👇下面代码是在预览控制器中写的👇

- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
    // 生成UIPreviewAction
    UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"one" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Action 1");
    }];
    
    UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"two" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        NSLog(@"Action 2");
    }];
    
    // 添加到数组里返回
    NSArray *actions = @[action1, action2];
    
    return actions;
}

  • 到此,大功告成!

欢迎小伙伴指出不足之处,鄙人将竭尽全力哈萨黑~

相关文章

网友评论

  • fc18f69e6ff0: 网易云音乐那种3d怎么做? 还有图标怎么放在左边?
    GiantAxe77:@闭上眼睛 那个是由于添加了Widget造成的,所以3DTouch的item自动变宽了
    fc18f69e6ff0:@GiantAxe 网易音乐,酷我音乐的都是接近全屏的
    GiantAxe77:@闭上眼睛 图标居左还是居右是根据你的app的位置来自动判断的
  • 溪浣双鲤:及时雨
    GiantAxe77:@溪浣双鲤 嘿嘿嘿😝新技术多交流

本文标题:3DTouch攻略

本文链接:https://www.haomeiwen.com/subject/dtnsettx.html