3DTouch攻略

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;
}

  • 到此,大功告成!

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 关于这篇文章 由于iPhone 6S发布不到一年的时间,很多新特性、新技术还未普遍,不管是3D Touch的...
    Tangentw阅读 10,083评论 8 18
  • 前言 关于3D touch苹果官方文档是这么开始介绍的: 大意如下:iOS9开始,所有新的手机都增加了一个三维的用...
    VV木公子阅读 6,767评论 3 39
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,736评论 4 61
  • 文:杨长懿 一年青人做什么事情都要按照自己的标准来,因此在许多时候都无意中得罪了不少人,同时Ta自己也时常不开心。...
    杨长懿阅读 1,495评论 0 0
  • 这是第一次在简书上写东西,很惶恐也很害怕,因为除过在起点上写了两本早就太监的小说之外,自己没有任何可以拿的出手的东...
    阀福阅读 1,328评论 0 0

友情链接更多精彩内容