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. ...
随机推荐
- python 零散记录(四) 强调字典中的键值唯一性 字典的一些常用方法
dict中键只有在值和类型完全相同的时候才视为一个键: mydict = {1:1,':1} #此时mydict[1] 与 mydict['1']是两个不同的键值 dict的一些常用方法: clear ...
- EF-CodeFirst-表关系-延迟/贪婪加载
表关系建立: http://blog.csdn.net/niewq/article/details/17232321 一对多: namespace LckLib.EF.V6.Models { publ ...
- jQuery技术内幕电子版4
参数selector是复杂HTML代码 则利用浏览器的innerHTML机制创建DOM元素 第157行:如果HTML代码满足缓存条件,则在使用转换后的DOM元素时,必须先复制一份再使用,否则可以直接使 ...
- HTML5与CSS3权威指南.pdf3
表单验证 <input name="text" type="text" required pattern="^\w.*$"> r ...
- xml基础小结
XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的“数据库” 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空格,区分大小写.有且仅有一个根标签 ...
- WebSocket与Tcp连接
最近做了一个项目,客户端为WebSocket页面,服务器端为Tcp控制台 .将代码贴出来,供需要的参考. 1.服务器端代码 其中服务器的Session使用了第三方插件,为TCP连接. 2.客户端代码如 ...
- SSH框架总结(框架分析+环境搭建+实例源代码下载)
首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框 ...
- 2440test 裸机測试 调试不进main 设置改动方法
2440test没进main函数并非跑飞.bin文件已经烧写到开发板里了的 而是没选择载入文件,导致不能调试程序文件 主要设置例如以下:
- Load resources from classpath in Java--reference
In general classpath is the path where JVM can find .class files and resources of your application a ...
- hdu2073递推题
无限的路 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissio ...