3DTouch
3DTouch
一、主屏按压(Home Screen Quik Actions)
1.静态标签
在info.plist文件中新增项
关键字 | 意义 |
---|---|
UIApplicationShortcutItems | 数组中的元素就是我们的那些快捷选项标签。 |
UIApplicationShortcutItemTitle | 标签标题(必填) |
UIApplicationShortcutItemType | 标签的唯一标识 (必填) |
UIApplicationShortcutItemIconType | 使用系统图标的类型,如搜索、定位、home等(可选) |
UIApplicationShortcutItemIcon File | 使用项目中的图片作为标签图标 (可选) |
UIApplicationShortcutItemSubtitle | 标签副标题 (可选) |
UIApplicationShortcutItemUserInfo | 字典信息,如传值使用 (可选) |
2.动态标签
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//创建应用图标上的3D touch快捷选项
[self creatShortcutItem];
UIApplicationShortcutItem *shortcutItem = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
//如果是从快捷选项标签启动app,则根据不同标识执行不同操作,然后返回NO,防止调用- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
if (shortcutItem) {
//判断先前我们设置的快捷选项标签唯一标识,根据不同标识执行不同操作
if([shortcutItem.type isEqualToString:@"first"]){
NSArray *arr = @[@"hello 3D Touch"];
UIActivityViewController *vc = [[UIActivityViewController alloc]initWithActivityItems:arr applicationActivities:nil];
[self.window.rootViewController presentViewController:vc animated:YES completion:^{
}];
} else if ([shortcutItem.type isEqualToString:@"share"]) {//进入分享界面
NSLog(@"share");
} else if ([shortcutItem.type isEqualToString:@""]) {//进入界面
}
return NO;
}
return YES;
}
//创建应用图标上的3D touch快捷选项
- (void)creatShortcutItem {
//创建系统风格的icon
UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare];
// //创建自定义图标的icon
// UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"分享.png"];
//创建快捷选项
UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc] initWithType:@"share" localizedTitle:@"分享" localizedSubtitle:@"分享副标题" icon:icon userInfo:nil];
//添加到快捷选项数组
[UIApplication sharedApplication].shortcutItems = @[item];
}
3.点击快捷选项标签进入应用的响应
在appdelegate中实现方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
并在方法中根据shortcutItem.type判断是点击了哪个选项标签
4.peek(预览)和 pop(跳转至预览界面)
- 首先注册peek 和 pop 功能
- (UIView *)touchView {
if (!_touchView) {
_touchView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 80)];
_touchView.center = self.view.center;
_touchView.backgroundColor = [UIColor colorWithRed:0.2 green:0.4 blue:0.5 alpha:1];
// 给view注册3DTouch 的 peek 和pop 功能
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
NSLog(@"3D Touch 可用!");
//给cell注册3DTouch的peek(预览)和pop功能
[self registerForPreviewingWithDelegate:self sourceView:_touchView];
} else {
NSLog(@"3D Touch 无效");
}
}
return _touchView;
}
- 遵守协议UIViewControllerPreviewingDelegate
- 实现协议方法
#pragma mark - preview
// peek (预览)
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location {
// [previewingContext sourceView]即为所按压的视图
UIView *view = [previewingContext sourceView];
// 设置不被虚化的范围
CGRect rect = view.bounds;
[previewingContext setSourceRect:rect];
// peek (预览界面)
touchViewController *tvc = [[touchViewController alloc] init];
tvc.preferredContentSize = CGSizeMake(0, 100); // 预览图的大小
return tvc;
}
// pop (在预览基础上更用力按压)
- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
// 根视图控制器不是navigationController那么将不回有返回键
[self showViewController:viewControllerToCommit sender:self];
}
5.预览视图上滑显示快捷选项
在预览视图控制器中实现方法
// 预览视图上滑时显示的快捷选项
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems {
UIPreviewAction *action0 = [UIPreviewAction actionWithTitle:@"第一名" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"0001");
}];
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"第二名" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"0002");
}];
UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"第三名" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"0003");
}];
return @[action0,action1,action2];
}
6.压力值
// 取得压力
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[touches allObjects] lastObject];
NSLog(@"压力:%f",touch.force);
}
3DTouch的更多相关文章
- 3DTouch开发 (基础)
一.3DTouch开发准备工作(让模拟器也支持 3DTouch 的解决办法) 需要支持3DTouch的设备,如iPhone6s或以上.iOS9或以上.Xcode7或以上,估计很多和我一样的屌丝还没有i ...
- iOS - 3DTouch 3D 触摸
1.3DTouch 简介 3DTouch 是 iOS9 + 系统下,在 iPhone6s(iPhone6s Plus)+ 手机上才能够使用的功能. 1.1 3DTouch 基本类型 1.主屏幕快速选项 ...
- Xcode7中添加3DTouch
首先是插件SBShortcutMenuSimulator的安装 1.git clone https://github.com/DeskConnect/SBShortcutMenuSimulator.g ...
- 使用UIImagePickerController时3DTouch引起的Crash问题的解决--备用
一.crash的场景 程序中用到UIImagePickerController时,如果在IPhone6S上运行APP,当forceTouch 一个图片时程序会crash,并附带如下crash mess ...
- 使用UIImagePickerController时3DTouch引起Crash
一.crash的场景 程序中用到UIImagePickerController时,如果在IPhone6S上运行APP,当forceTouch 一个图片时程序会crash,并附带如下crash mess ...
- 3DTouch简单了解
3D Touch的三大模块 代码Demo:https://github.com/haozheMa/3DTouch 在我们的app中使用3D Touch功能,主要分为以下三个模块: 1.Home Scr ...
- 配置Info.plist (设置状态栏样式、自定义定位时系统弹出的提示语、配置3DTouch应用快捷菜单)
一.概述 iOS中很多功能需要配置Info.plist才能实现,如设置后台运行.支持打开的文件类型.自定义访问隐私内容时弹出的提示等.了解Info.plist中各字段及其含义,可以访问苹果开发网站相关 ...
- 3DTouch - iOS新特性
概述 3DTouch是一种立体触控技术,被苹果称为新一代多点触控技术. 详细 代码下载:http://www.demodashi.com/demo/10708.html 6s和6s plus之后特有效 ...
- iOS 3DTouch
概述 iOS10系统登录中国,在系统中对3D Touch的使用需求更频繁,所以对iOS9中便引入的3D Touch功能做一些了解是很有必要的 详细 代码下载:http://www.demodashi. ...
随机推荐
- (转载)AS3中的mouseEnabled与mouseChildren
(转载)http://www.cnblogs.com/gongchen/archive/2013/05/09/3069055.html mouseEnabled与mouseChildren都是用来确定 ...
- HDOJ/HDU 1113 Word Amalgamation(字典顺序~Map)
Problem Description In millions of newspapers across the United States there is a word game called J ...
- 2D游戏编程3—GDI
WM_PAINT消息触发程序重新绘制界面,过程如下: PAINTSTRUCT ps; // used in WM_PAINT HDC hdc; // handle to ...
- OpenCL memory object 之 Global memory (1)
本文转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/17/2291239.html 这篇日志是学习AMD OpenCL文档时候的总结. ...
- mysql常用的一些命令,用于查看数据库、表、字段编码
1.查看数据库支持的所有字符集 show character set;或show char set; 2.查看当前状态 里面包括当然的字符集设置 status或者\s ...
- hdoj 1869 六度分离【最短路径求两两边之间最长边】
六度分离 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Gradle DSL method found: ‘android()’错误
Gradle DSL method found: ‘android()’错误 和上个错误一样这个也是因为在新版本的Gradle中android()方法已经废弃,但是要注意android()只是在整个项 ...
- JAVA 面向对象-2-继承(Inheritance)
i.继承(Inheritance) 1.继承的概念 继承:在面向对象编程的过程中,通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类. 继承是面向对象编程最重要的特征之一. 继承的优点:1 ...
- Zend Framework 2参考Zend\Authentication(摘要式身份验证)
Zend Framework 2参考Zend\Authentication(摘要式身份验证) 介绍 摘要式身份验证是HTTP身份验证的方法,提高了基本身份验证时提供的方式进行身份验证,而无需在网络上以 ...
- RocketMq消息队列使用
最近在看消息队列框架 ,alibaba的RocketMQ单机支持1万以上的持久化队列,支持诸多特性, 目前RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,bin ...