神刀安全网

3DTouch攻略

3DTouch概览

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

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

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

3DTouch攻略
酷炫吊炸天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...");     }  }
  • 实现出来的效果如图:
3DTouch攻略
效果图.jpeg

  • 或者可以使用info.plist静态添加3DTouch,方法更是easy,直接上图:
3DTouch攻略
静态添加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; }
  • 到此,大功告成!

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

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 3DTouch攻略

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址