iOS 指压即达集成iOS9里的3D Touch的方法

1.前言  

随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助。

2.如何使用3D Touch?  

2.1.主界面重按APP图标,弹出Touch菜单  

在AppleDelegate文件中的程序入口处配置:

didFinishLaunchingWithOptions

//给App图标添加3D Touch菜单
//拍照
//菜单图标
UIApplicationShortcutIcon *iconCamera = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd];
//菜单文字
UIMutableApplicationShortcutItem *itemCamera = [[UIMutableApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"拍照"];
//绑定信息到指定菜单
itemCamera.icon = iconCamera;
//相册
//菜单图标
UIApplicationShortcutIcon *iconPhotoLibrary = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch];
//菜单文字
UIMutableApplicationShortcutItem *itemPhotoLibrary = [[UIMutableApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"相册"];
//绑定信息到指定菜单
itemPhotoLibrary.icon = iconPhotoLibrary;
//绑定到App icon
application.shortcutItems = @[itemCamera,itemPhotoLibrary];

弹出菜单,我们需要让用户点击后跳转指定页面

这里我们会用到AppDelegate里新增加的一个方法

- (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler; 

让后我们需要在这个方法里做跳转的操作

//照相type
if ([shortcutItem.type isEqualToString:@"1"]) {

 UIImagePickerController *picker = [[UIImagePickerController alloc] init];//初始化
 picker.allowsEditing = YES;//设置可编辑
 picker.sourceType = UIImagePickerControllerSourceTypeCamera;
 [self.window.rootViewController presentViewController:picker animated:YES completion:nil];//进入照相界面

}
//相册type
if ([shortcutItem.type isEqualToString:@"2"]) {
 UIImagePickerController *picker = [[UIImagePickerController alloc] init];//初始化
 picker.allowsEditing = YES;//设置可编辑
 picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
 [self.window.rootViewController presentViewController:picker animated:YES completion:nil];//进入图片库

点击后分别会进入相机和相册

2.2. 3DTouch轻按预览功能,预览时底部菜单的添加  

首先我们要把轻按预览和长按手势区分开来,这里要在初始化时做一个基本的检测。

nterface ViewController () <UIViewControllerPreviewingDelegate>
{
 UILongPressGestureRecognizer *_longPress;
}
@end
@implementation ViewController
- (void)viewDidLoad {
 [super viewDidLoad];
 UILongPressGestureRecognizer *longPressGr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressToDo)];
 _longPress = longPressGr;
}
//检测页面是否处于3DTouch
- (void)check3DTouch{
 if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
  [self registerForPreviewingWithDelegate:self sourceView:self.view];
  NSLog(@"3D Touch 开启");
  //长按停止
  _longPress.enabled = NO;
 }else{
  _longPress.enabled = YES;
 }
}
- (void)viewWillAppear:(BOOL)animated{
 [self check3DTouch];
}

然后我们需要实现 UIViewControllerPreviewingDelegate的协议

@interface ViewController () <UIViewControllerPreviewingDelegate>
//然后实现代理方法
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location;
#pragma mark >> 3D touch 代理方法
//轻按进入浮动预览页面
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
 //注意这里我因为测试,没做具体的位置处理,如果需要定位到具体的图片Cell位置的话,可以用location通过tableView的convertPoint来取到指定Cell
 ASPreviewViewController *vc = [[ASPreviewViewController alloc] init];
 vc.view.frame = self.view.frame;
 UIImageView *er = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"123.png"]];
 vc.view = er;
 return vc;
}

完成后可以实现基本的预览效果:

最后我们加上一个

预览时下滑底部菜单的添加

在我们刚刚创建的预览控制器ASPreviewViewController里实现 UIViewControllerPreviewingDelegate的协议

然后重写它的代理方法

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

//预览页面 底部Action Items
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems{
 UIPreviewAction *p1 =[UIPreviewAction actionWithTitle:@"分享" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
  NSLog(@"点击了分享");
 }];
 UIPreviewAction *p2 =[UIPreviewAction actionWithTitle:@"收藏" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
  NSLog(@"点击了收藏");
 }];
 NSArray *actions = @[p1,p2];
 return actions;
}

以上所述是小编给大家介绍的iOS 指压即达集成iOS9里的3D Touch的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • iOS10 widget实现3Dtouch 弹出菜单

    文章将依次从以下几个问题着手,进行详细说明: 1.如何为现有的工程添加widget: 2.如何绘制UI: 3.如何调起app: 4.如何与host app共享数据. 图2 添加today的target 图3 添加today之后的工程目录 这是添加Today Extension之后的工程目录. 到这里,为现有的工程添加Today Extension算是完成了,运行程序就可以看到类似图1的简单的效果了,很简单哈. 绘制UI 图4 删除默认创建的MainInterface并修改Info.plist 这

  • iOS 指压即达集成iOS9里的3D Touch的方法

    1.前言 随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助. 2.如何使用3D Touch? 2.1.主界面重按APP图标,弹出Touch菜单 在AppleDelegate文件中的程序入口处配置: didFinishLaunchingWithOptions //给App图标添加3D Touch菜单 //拍照 //菜单图标 UIApplicationShortcutI

  • iOS中Swift指触即开集成Touch ID指纹识别功能的方法

    1.前言 随着移动支付时代的到来,Touch ID 指纹验证迅速被支付宝,微信钱包普及,相信各位朋友使用后也大呼方便.今天写一篇关于指纹解锁的文章. 关于3D Touch 感兴趣的朋友可以看我前篇blog *    iOS- 指压即达,如何集成iOS9里的3D Touch http://www.jb51.net/article/108922.htm 2.指纹验证Touch ID的介绍 相比3D Touch来说,指纹验证Touch ID 的使用比较简单 主要分成两步 1.第一步当然是检测你的手机是

  • iOS使用fastlane实现持续集成的方法教程

    前言 最近公司有打渠道包的需求,领导说使用fastlane来做持续集成,发了点时间研究了下,所有有了这篇文章 本文主要涉及到以下几个主题: fastlane是什么和为什么使用fastlane fastlane安装和设置 在项目中集成fastlane 是什么和为什么 fastlane是一款使用ruby实现的跨平台的持续集成工具,支持安卓和iOS平台项目的持续集成实践,fastlane处理提供基本的但是很强大的包含了:初始设置.屏幕截图.打包.上传到测试平台.部署等功能.此外还有大量的第三方插件可以

  • thinkphp3.2框架集成QRcode生成二维码的方法分析

    本文实例讲述了thinkphp3.2框架集成QRcode生成二维码的方法.分享给大家供大家参考,具体如下: 一.下载QRcode源代码 https://sourceforge.net/projects/phpqrcode/files/releases/ 使用phpqrcode必须开启GD2扩展,phpqrcode提供了一个png()方法,通过该方法,我们可以生成自已需要的二维码.该函数定义如下: public static function png( $text, $outfile = fals

  • 详解Typescript里的This的使用方法

    this可以说是Javascript里最难理解的特性之一了,Typescript里的 this 似乎更加复杂了,Typescript里的 this 有三中场景,不同的场景都有不同意思. this 参数: 限制调用函数时的 this 类型 this 类型: 用于支持链式调用,尤其支持 class 继承的链式调用 ThisType: 用于构造复杂的 factory 函数 this 参数 由于 javascript 支持灵活的函数调用方式,不同的调用场景,this 的指向也有所不同 作为对象的方法调用

  • springboot集成@DS注解实现数据源切换的方法示例

    目录 启用@DS实现数据源切换 POM内添加核心jar包 yml配置 “核心”-使用@DS注解 最后 启用@DS实现数据源切换 POM内添加核心jar包         <dependency>             <groupId>com.baomidou</groupId>             <artifactId>dynamic-datasource-spring-boot-starter</artifactId>        

  • IOS中使用UIWebView 加载网页、文件、 html的方法

    UIWebView 是用来加载加载网页数据的一个框.UIWebView可以用来加载pdf word doc 等等文件 生成webview 有两种方法: 1.通过storyboard 拖拽 2.通过alloc init 来初始化 创建webview,下列文本中 _webView.dataDetectorTypes = UIDataDetectorTypeAll; 是识别webview中的类型,例如 当webview中有电话号码,点击号码就能直接打电话 - (UIWebView *)webView

  • 在java中实现C#语法里的按引用传递参数的方法

    在C#中,在次函数中调用时改变了其中的数值,主函数中也将发生改变 ref 关键字使参数按引用传递.其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字 out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化.若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字. Java里面不像C#那样,Java只有对象类

  • iOS 防止按钮多次点击造成多次响应的方法

    iOS 防止按钮多次点击造成多次响应的方法 在日常开发中经常会碰到一种bug就是因为用户快速点击某个按钮,导致页面重复push或者重复发送网络请求.这样的问题既对用户体验有影响,而且还会一定程度上增加服务器的压力. 目前,我为了防止按钮快速点击主要使用以下两种办法 1.在每次点击时先取消之前的操作(网上看到的方法) - (void)buttonClicked:(id)sender { //这里是关键,点击按钮后先取消之前的操作,再进行需要进行的操作 [[self class] cancelPre

  • javascript中利用柯里化函数实现bind方法

    柯理化函数思想:一个js预先处理的思想:利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的值进行相关的操作处理即可: 柯里化函数主要起到预处理的作用: bind方法的作用:把传递进来的callback回调方法中的this预先处理为上下文context; /** * bind方法实现原理1 * @param callback [Function] 回调函数 * @param con

随机推荐