iOS 3D Touch

  • 前言
苹果官方文档永远是最好的学习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://upload-images.jianshu.io/upload_images/2879573-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://upload-images.jianshu.io/upload_images/2879573-38f00d59bdc04930.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
*  最后
参考文章 : https://developer.apple.com/ios/3d-touch/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 关于这篇文章 由于iPhone 6S发布不到一年的时间,很多新特性、新技术还未普遍,不管是3D Touch的...
    Tangentw阅读 4,589评论 8 18
  • 一、简介 3D Touch是指:通过对屏幕施加不同程度的压力来访问附加功能。应用可以通过显示菜单、展示其他内容和播...
    DamonMok阅读 20,655评论 11 93
  • 3D Touch简介 2015年,苹果发布了iOS9以及iphone6s/iphone6s Plus,其中最具有创...
    爱恨的潮汐阅读 393评论 0 2
  • 一、3D Touch 介绍 3D Touch 是 Apple 推出的通过压力感触区分轻按和重按来进行不同的用户交互...
    Magician阅读 623评论 1 6
  • 1 3D Touch 的三大模块 在我们的app中使用3D Touch功能,主要分一下三个模块: 1.1 Home...
    点滴86阅读 2,547评论 1 7