iOS开发 3D Touch的简单使用

原创 2015年12月17日 18:30:04

3D Touch,苹果iPhone 6s的新功能。有Quick Actions以及Peek Pop 两种新手势,Peek专注于预览,Pop可以全面展现内容。

一、Quick Actions

1、设置重按图标显示的操作, AppDelegate中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中执行:

    // 拍照 UIApplicationShortcutIcon 设置icon
    UIApplicationShortcutIcon *iconCamera = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeCapturePhoto];
    // UIMutableApplicationShortcutItem 设置标题和type(可以作为一种标识)
    UIMutableApplicationShortcutItem *itemCamera = [[UIMutableApplicationShortcutItem alloc] initWithType:@"camera" localizedTitle:@"拍照"];
    
    itemCamera.icon = iconCamera;
    
    // 相册
    UIApplicationShortcutIcon *iconPhotoLibrary = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeLove];
    UIMutableApplicationShortcutItem *itemPhotoLibrary = [[UIMutableApplicationShortcutItem alloc] initWithType:@"photoLibrary" localizedTitle:@"相册"];
    
    itemPhotoLibrary.icon = iconPhotoLibrary;
    
    // 设置自定义图片的icon
//    NSDictionary *userInfo1 = @{@"key":@"example"};
    UIApplicationShortcutIcon *exampleIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"imageName"];
    UIMutableApplicationShortcutItem *exampleItem = [[UIMutableApplicationShortcutItem alloc] initWithType:@"example" localizedTitle:@"大标题" localizedSubtitle:@"小标题" icon:exampleIcon userInfo:nil]; // 分大标题和小标题
    
    application.shortcutItems = @[itemCamera, itemPhotoLibrary, exampleItem];
2、在AppDelegate.m中实现下面方法:

// 自己实现下面方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
    // 根据type响应每个按钮的结果。
    if ([shortcutItem.type isEqualToString:@"camera"]) {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.allowsEditing = YES;
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;
        [self.window.rootViewController presentViewController:picker animated:YES completion:nil];
    }
    
    if ([shortcutItem.type isEqualToString:@"photoLibrary"]) {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.allowsEditing = YES;
        picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [self.window.rootViewController presentViewController:picker animated:YES completion:nil];
    }
    
    if ([shortcutItem.type isEqualToString:@"example"]) {
        NSLog(@"example");
    }
}



二、Peek和Pop

1、首先在需要进行3DTouch的类中遵守协议:UIViewControllerPreviewingDelegate

2、注册代理:

// 3DTouch
-(void)registerPreview
{
    // 判断:如果如果支持3DTouch就进行注册代理
    if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
        // sourceView是支持3DTouch的区域,即能感知力度的区域
        [self registerForPreviewingWithDelegate:self sourceView:self.view];
    }
    else {
//        NSLog(@"该设备不支持3D-Touch");
    }
}
3、实现代理方法
// 稍重点击的时候调用 peek
// previewingContext:预览内容   location:是按压的位置
- (UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
    // 创建预览的控制器或者视图
    SecondViewController *vc = [[SecondViewController alloc] init];
    // 预览内容的区域,(0, 0)为默认区域
    vc.preferredContentSize = CGSizeMake(0, 0);
    // 轻点后在sourceRect范围外的区域变模糊
    previewingContext.sourceRect = self.btn.frame;

    return vc;
}
// 加重按调用
- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
    // 在这里执行加重按后的代码
    [self showViewController:viewControllerToCommit sender:self];
}
4、设置目的控制器(即预览的控制器)下面可以点击的操作(如复制、点赞等):

// 预览下面的按钮,这里是一个数组,可以设置多个action,会有多个操作。
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
    return @[
             [UIPreviewAction actionWithTitle:@"请点击我" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
                 NSLog(@"你点到我了");
             }]];
}


demo地址:https://github.com/sweetday/3DTouch.git

















模拟器使用3D Touch功能

在模拟器上学习和测试3D Touch    3D Touch是一个很新颖的设计,可是苹果文档有言: With Xcode 7.0 you must develop on a dev...
  • jinglijun
  • jinglijun
  • 2015年12月06日 16:12
  • 3777

3D Touch 的实现和系统分享功能

3D Touch其实就是快速进入指定app界面的一种方式。 下面和大家分享一下简单的实现 1、静态标签 静态标签是我们在项目的配置plist文件中配置的标签,在用户安装程序后就可以使用,并且排序...
  • yishengzhiai005
  • yishengzhiai005
  • 2016年12月07日 15:30
  • 1829

IOS开发之 一起用Swift来玩一玩3D Touch

Swift 2.3 IOS 8.0 XCode 8.0 添加入口标签在这里只说下静态的好了,暂时还用不到动态的,e.g.UIApplicationShortcutItems ...
  • sbt0198
  • sbt0198
  • 2017年02月07日 14:45
  • 966

关于3D Touch从app图标快速入口篇.

一: 让模拟器可以测试3D Touch的快速入口效果步骤(本人也是在github上发现的方法,再次总结一下):  模拟器测试3D Touch的方法  1. 打开终端  2. git clon...
  • u011103672
  • u011103672
  • 2015年09月25日 17:20
  • 1323

关于3D touch 一些简单实用

一、  3D touch简单使用,一般开发用到两种情况      1、在app图标上使用3D Touch;      2、在程序内使用3D Touch;            ...
  • u014365593
  • u014365593
  • 2016年11月16日 10:40
  • 77

3DTouch在Unity游戏开发中的一个坑

起因  游戏测试过程中有这样一个反馈, 按住控制角色行走, 当按住触摸屏幕左铡边缘部位时, 有时会有1秒左右的延迟. 很是影响游戏的体验. 多次测试后, 具体表现为 表现 1. 支持3DTouch的设...
  • rct1985
  • rct1985
  • 2016年11月11日 11:41
  • 1016

手把手教你如何实现3D Touch

很久之前就想写一篇关于3D Touch的博客,因为各种原因一直到现在才开始写(其实就是懒>_...
  • wangkun_510
  • wangkun_510
  • 2015年10月29日 16:19
  • 1383

3D Touch开发之App 快速入口标签(快捷菜单)

一、简介:自从苹果公司引入了 3D Touch 功能后,众多开发者,也开在自己的app上实现自己的 3D Touch 效果,今天我也来小秀一把。我们先来看看,3D Touch 下的 app 快速启动入...
  • zhengang007
  • zhengang007
  • 2015年12月16日 11:45
  • 1432

IOS实现3DTouch功能

赶需求期间,想着别人应用都搞起3DTouch功能了,咱也来装逼一会,凸显下逼格。 废话少说,先搜索了前人的热心奉献,自己再动手丰衣足食,下面归纳总结下。 首先,想要体验3DTouch功能,必须至少得是...
  • a416863220
  • a416863220
  • 2016年04月22日 10:35
  • 8624

3Dtouch 基本原理

UIApplicationShortcutItems即用3Dtouch在app图标呼出一个菜单       实现由两种方法:静态菜单和动态菜单   静态菜单是在plist中添加,...
  • c386890506
  • c386890506
  • 2016年03月14日 14:26
  • 893
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发 3D Touch的简单使用
举报原因:
原因补充:

(最多只允许输入30个字)