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游戏引擎设计与开发

本课程主要是讲解3D游戏引擎架构,以及如何去封装3D游戏引擎,充分利用固定流水线逐一实现从游戏开发核心底层到游戏逻辑的编写,引领你一步步编写3D引擎。以及如何在封装好游戏引擎的基础上进行游戏逻辑开发。
  • 2015年03月16日 08:27

IOS 3D Touch 开发教程

前一阵子伴随着苹果发布新产品iPhone6s 和 IOS9新系统,一系列关于硬件和软件的新功能、新特性逐渐进入iPhone用户的视线。这次我们就来讲讲传闻已久的3D Touch。          当...
  • He_jiabin
  • He_jiabin
  • 2016-03-02 12:17:24
  • 3037

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

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

IOS实现3DTouch功能

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

iOS开发之3DTouch集成

静态添加入口标签在info.plist中添加如图所示 各项都代表的意思首先是UIApplicationShortcutItems,他是一个数组类型,数组中的每一个元素表示一个入口标签。然后是Item...
  • sinat_30162391
  • sinat_30162391
  • 2016-04-08 13:51:34
  • 1793

在xcode模拟器上运行3Dtouch

第一步, git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.git cd SBSho...
  • hurosezhang
  • hurosezhang
  • 2016-08-15 15:52:17
  • 1715

iOS 3D Touch开发 很良心的版本原创!

之前一直在忙着维护项目,偶然的一天闲着玩手机玩到3Dtouch,看着效果挺不错的 于是就尝试着搜索了一下相关的文案,结果除了官网给的全英文api意外国内的基本都 是互相抄袭,我搜了37篇文章,29篇相...
  • werctzzz
  • werctzzz
  • 2015-12-17 09:51:12
  • 3255

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

经过最近几天的研究,本人已经做出了一套快速入口的小demo,并且可以让模拟器进行3D Touch的快速入口效果. 一: 让模拟器可以测试3D Touch的快速入口效果步骤(本人也是在gi...
  • wave2588
  • wave2588
  • 2015-09-23 15:00:12
  • 1729

Unity 3D——Touch的用法

if (Input.touchCount >= 1) { Touch touch = Input.GetTouch(0); ...
  • k1246195917
  • k1246195917
  • 2014-08-29 15:28:56
  • 1889

iOS10 widget实现,3Dtouch 弹出菜单

文章将依次从以下几个问题着手,进行详细说明: 1、如何为现有的工程添加widget; 2、如何绘制UI; 3、如何调起app; 4、如何与host app共享数据。 图2 添...
  • SHTLoveXX
  • SHTLoveXX
  • 2016-12-19 13:55:02
  • 1967
收藏助手
不良信息举报
您举报文章:iOS开发 3D Touch的简单使用
举报原因:
原因补充:

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