3DTouch
来源:互联网 发布:python难找工作 编辑:程序博客网 时间:2024/05/22 12:55
3DTouch是iOS9出的新特性,用户可以在手机主屏幕和app内部使用
1. 主屏幕的快捷操作
当用户按压应用图标是会弹出快捷操作列表,当用户选择选择一个快捷操作是,应用会被激活或者启动,同事你的代理对象会收到快捷操作的信息。
- 固定的快捷操作:需要在
Info.plist
里设置 UIApplicationShortcutItems - 动态的快捷操作:需要使用
UIApplicationShortcutItem
类和相关方法创建快捷操作,并设置UIApplication
的shortcutItems
的属性
2. 应用内使用
当用户按压时会经历三个阶段:
- 看看内容预览是否有效
- 展示预览内容
- present出内容预览页面
3. 使用
- 检查3D-Touch是否可用
//通过forceTouchCapability属性判断3DTousch是否可用 //UIForceTouchCapabilityUnknown、UIForceTouchCapabilityUnavailable、UIForceTouchCapabilityAvailable//实现UITraitEnvironment协议的类都可以直接调用,UIScreen、UIWindow、UIViewController、UIView都实现了该协议if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){ NSLog(@"可用");}//重写该方法可以监听状态改变改变- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection如果3DTouch不可用需要自己写 UILongPressGestureRecognizer来代替
主屏幕快捷操作—固定的快捷操作
需要在
Info.plist
文件中添加UIApplicationShortcutItems
UIApplicationShortcutItemType快捷操作的类型,需要这个识别快捷操作
UIApplicationShortcutItemTitle快捷操作的标题
UIApplicationShortcutItemSubtitle快捷操作的子标题
UIApplicationShortcutItemIconType快捷操作的图标
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch.//如果程序被杀掉,在这里拿到快捷操作 if([[UIDevice currentDevice].systemVersion floatValue] >= 9.0){ UIApplicationShortcutItem *shortcutItem = launchOptions[UIApplicationLaunchOptionsShortcutItemKey]; if(shortcutItem){ //根据type判断要指定哪个操作 } } return YES;}//设置完plist文件后需要在appdelegate中重写该方法- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {//根据type来判断执行不同的操作 if([shortcutItem.type isEqualToString:@"search"]){ NSLog(@"search"); }else if([shortcutItem.type isEqualToString:@"open"]){ NSLog(@"open"); } completionHandler(YES);}
主屏幕快捷操作——— 动态的快捷操作
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. if([[UIDevice currentDevice].systemVersion floatValue] >= 9.0){ UIApplicationShortcutItem *shortcutItem = launchOptions[UIApplicationLaunchOptionsShortcutItemKey]; if(shortcutItem == nil){ UIApplicationShortcutItem *firstItem = [[UIApplicationShortcutItem alloc] initWithType:@"first" localizedTitle:@"第一个" localizedSubtitle:@"子标题" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"sun1"] userInfo:nil]; UIApplicationShortcutItem *secondItem = [[UIApplicationShortcutItem alloc] initWithType:@"second" localizedTitle:@"第二个" localizedSubtitle:@"子标题" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"sun2"] userInfo:nil]; application.shortcutItems = @[firstItem,secondItem]; }else{ //根据type判断要指定哪个操作 } } return YES;}//自定义图标需要正方形,单一颜色,35*35的图才可以使用
应用内使用
应用内使用3DTouch需要使用
UIPreviewAction
和UIPreviewActionGroup
类以及UIPreviewActionItem
协议
- (void)viewDidLoad { [super viewDidLoad]; _imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 70, 70)]; _imgView.center = self.view.center; _imgView.image = [UIImage imageNamed:@"sun"]; _imgView.userInteractionEnabled = YES; [self.view addSubview:_imgView]; //先判断3DTouch是否可用 if(self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable){ //注册,首先是一个代理,sourceView是你需要将3DTouch加到的view上 [self registerForPreviewingWithDelegate:self sourceView:_imgView]; }}//实现代理方法#pragma UIViewControllerPreviewingDelegate- (nullable UIViewController *)previewingContext:(id <UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location { //location是按压在应用3DTouch视图上的位置 //设置sourceRect,应用3DTouch视图的bounds previewingContext.sourceRect = _imgView.bounds; //这是需要弹出的controller DetailViewController *detailVC = [[DetailViewController alloc] init]; //预览是后的大小 detailVC.preferredContentSize = CGSizeMake(0, 300); return detailVC;}- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit { //present预览的controller [self showViewController:viewControllerToCommit sender:self];}//这是再DetailViewController.m文件中的重写的,当弹出预览时,上滑预览视图,出现预览视图中快捷选项- (NSArray<id<UIPreviewActionItem>> *)previewActionItems { UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"action1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"action1"); }]; UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"action2" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"action2"); }]; UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"action3" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"action3"); }]; return @[action1,action2,action3];}
阅读全文
0 0
- 3DTouch
- 3DTouch
- 3DTouch
- IOS 3Dtouch
- 3DTouch Demo
- IOS9 3DTouch
- 3DTouch学习笔记
- 关于3DTouch
- 3DTouch 基本使用
- IOS开发 3DTouch
- 3DTouch简单实现
- 3DTouch的分享
- 3DTouch的使用
- iOS 3DTouch 开发
- 3Dtouch 基本原理
- 3Dtouch实现
- 3DTouch桌面快捷方式
- iOS 3DTouch
- Codeforces 808E Selling Souvenirs 题解
- 监督学习(supervised learning)和无监督学习(unsupervised learning)
- opencv for ios 配置后#import <opencv2/opencv.hpp>报错:file not found问题(opencv3.2.0)
- C++实现R语言向量化运算(向量类:c 矩阵类:matrix)2015.9.11
- PE文件格式学习笔记
- 3DTouch
- 应用之间的通信Aidl和共享内存块MemoryFile的使用
- 仿iOS滚轮选择控
- socket客户端与服务端消息互发
- 接口和抽象类
- JavaWeb学习十一(JSTL标签库)
- SSH中的jar包讲解
- 使用阿里云的短信服务发送短信验证码
- NDK 编译