iOS 3D Touch

作者: xx_Coding | 来源:发表于2017-02-05 18:35 被阅读123次
    • 前言
    苹果官方文档永远是最好的学习iOS资料,没有之一。
    小编此刻感悟颇深,愿意把经验跟大家交流。
    
    • 目录
    1. Checking for 3D Touch Availability (检查3D Touch 是否可用)
    2. Home Screen quick action API  (主屏幕快速选项)
    3. UIKit peek and pop API
    4. Web view peek and pop API (可以使用系统提供HTML链接预览功能)
    5. UITouch force properties  (压力值)
    
    • 这里只做讨论 UIKit peek and pop API
      • 首先直接上Demo:
      • 首先实现协议 UIViewControllerPreviewingDelegate
    // 需要展示内容
    - (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location NS_AVAILABLE_IOS(9_0);
    //pop回来的事件
    - (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit NS_AVAILABLE_IOS(9_0);
    

    然后对设备进行检测,看看是否满足3D Touch的条件

    - (BOOL) Check3DTouch {
       if (self.traitCollection.forceTouchCapability ==       UIForceTouchCapabilityAvailable) {
           return YES;
             }
       return NO;
    }
        ```
    
      * 应用在运行时用户也有可能关闭或开启 3D Touch,这时会触发traitCollectionDidChange代理方法,但代理方法previousTraitCollection参数是取到之前的状态,所以还需要self.traitCollection.forceTouchCapability来判断当前的状态
    
    
    • (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection
      {
      if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
      //功能可用的情况下进行注册
      [self registerForPreviewingWithDelegate:self sourceView:self.tableView];
      }else{
      }
      }
    完成上面之后,出现的效果图如下:
    
    ![IMG_0260.PNG](http:https://img.haomeiwen.com/i2879573/7bd5b4a9f7a991fa.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    * 下面就来实现地步的选项卡 在TouchViewController文件里实现协议 UIPreviewActionItem 实现如下代码
    
    

    pragma mark - UIPreviewActionItem

    ifdef __IPHONE_9_0

    -(NSArray<id<UIPreviewActionItem>> *)previewActionItems {

    UIPreviewAction *act1 = [UIPreviewAction actionWithTitle:@"Touch one" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
        // 添加点击操作处理
        SFSafariViewController *sf = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"https://www.baidu.com"]];
        [self.viewController.navigationController pushViewController:sf animated:YES];
    
    }];
    
    UIPreviewAction *act2 = [UIPreviewAction actionWithTitle:@"Touch Two" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    
    }];
    
    UIPreviewAction *act3 = [UIPreviewAction actionWithTitle:@"Touch Three" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
    
    }];
    return [NSArray arrayWithObjects:act1,act2,act3, nil];
    

    }

    endif

    * 效果图如下
    
    ![IMG_0261.PNG](http:https://img.haomeiwen.com/i2879573/38f00d59bdc04930.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    *  最后
    参考文章 : https://developer.apple.com/ios/3d-touch/
    

    相关文章

      网友评论

        本文标题:iOS 3D Touch

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