关于3DTouch
来源:互联网 发布:淘宝信用值怎么看 编辑:程序博客网 时间:2024/06/06 05:39
关于3DTouch
3D Touch最开始在Apple Watch上面,叫 Force Touch ,后在iPhone6s以后的手机加入,并改名3D Touch。通俗的说就是屏幕根据感受的力度大小,提供一些快捷操作,有Peek Pop 两种新手势。详细介绍可参考苹果官方文档。
- 设置Quick Actions
1在应用图标上设置:可以通过在info.plist里设置,也可以通过代码动态设置 ,首先说一下通过info.plist设置,这里只设置了一项,多项的话可以增加UIApplicationShortcutItems数组内容(Actions最多显示4个,优先显示静态Actions,然后剩余个数显示shortcutItems的前几个。)。如下图(这些输入的时候不自动联想处来,需要自己完全打出来)
2.通过代码设置:
NSMutableArray *shortcutItems = [NSMutableArray array]; //实例化数组UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"1" localizedTitle:@"分享"]; UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"扫一扫"]; UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"3" localizedTitle:@"播放歌曲" localizedSubtitle:@"一次就好" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypePlay] userInfo:nil];; //设置原有的图标UIApplicationShortcutItem *item4 = [[UIApplicationShortcutItem alloc] initWithType:@"3" localizedTitle:@"快速定位" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"aaa"] userInfo:nil];//设置自定义的图片,图标都会默认被默认改成黑白色[shortcutItems addObject:item1];[shortcutItems addObject:item2];[shortcutItems addObject:item3];[shortcutItems addObject:item4];[[UIApplication sharedApplication] setShortcutItems:shortcutItems];
然后通过- (void)application:(UIApplication )application performActionForShortcutItem:(UIApplicationShortcutItem )shortcutItem completionHandler:(void (^)(BOOL))completionHandler方法处理每个快捷项的点击方法。
代码如下:
/** 处理shortcutItem */- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {switch (shortcutItem.type.integerValue) { case 1: { // 分享 [[NSNotificationCenter defaultCenter] postNotificationName:@"enjoy" object:self userInfo:@{@"type":@"1"}]; } case 2: { // 扫一扫 [[NSNotificationCenter defaultCenter] postNotificationName:@"scan" object:self userInfo:@{@"type":@"2"}]; } break; default: break;}
}
这里只处理了其中两项,然后在相应的地方接收并作出响应即可。
接下来说一下Peek&POP
Peek窗口就是通过用力按压某个区域的一个实时快照,不可点击但是有Quick Actions菜单
pe’ek触发阶段的三种状态:
- 长按【显示一个焦点视图,触发Peek的源视图高亮,其它视图都处于模糊状态】
- 轻压【显示Peek窗口,此时如果Peek窗口支持Quick Actions,往上滑会显示Quick Actions菜单,此时的Peek窗口是不可以点击的】
- 重压 【进入到真正的ViewController】
Peek由一个 可响应事件的View 触发,默认是关闭的,我们需要通过控制器的 registerForPreviewingWithDelegate: sourceView: 方法注册,第一个参数为 UIViewControllerPreviewingDelegate 的代理,Peek触发轻压时会调用其 previewingContext:viewControllerForLocation 方法,重压时会调用 previewingContext:commitViewController: 方法。第二个参数为触发Peek事件的源视图
注册以及实现相关代理方法的代码如下
这个方法检查是否开启了3D touch
-(void)check3DTouch{
//检测是否开启了3D touch
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
// 注册Peek和Pop方法
[self registerForPreviewingWithDelegate:self sourceView:self.view];
}
}
/* peek手势 /
- (nullable UIViewController *)previewingContext:(id )previewingContext viewControllerForLocation:(CGPoint)location {
detaileViewController *childVC = [[detaileViewController alloc] init];
// 获取用户手势点所在cell的下标。同时判断手势点是否超出tableView响应范围。if (![self getShouldShowRectAndIndexPathWithLocation:location]) return nil;previewingContext.sourceRect = self.sourceRect;return childVC;
}
实现了相关的代理方法
/* pop手势 /
- (void)previewingContext:(id )previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
[self tableView:self.tableView didSelectRowAtIndexPath:self.indexPath];detaileViewController *detai = [[detaileViewController alloc] init];[self showViewController:detai sender:self];}
然后再在pe’ek出来的ViewController中重写previewActionItems 方法
代码如下
//在这个利用到了UIPreviewAction 和 UIPreviewActionGroup 2个iOS9新加的类型和他们的初始化方法我们重写
-(NSArray《id《UIPreviewActionItem》》 *)previewActionItems{ // 生成UIPreviewAction UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"Action 1 selected");}]; UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Action 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"Action 2 selected");}];UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Action 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"Action 3 selected");}];UIPreviewAction *tap1 = [UIPreviewAction actionWithTitle:@"tap 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"tap 1 selected");}];UIPreviewAction *tap2 = [UIPreviewAction actionWithTitle:@"tap 2" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"tap 2 selected");}];UIPreviewAction *tap3 = [UIPreviewAction actionWithTitle:@"tap 3" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) { NSLog(@"tap 3 selected");}];// 塞到UIPreviewActionGroup中NSArray *actions = @[action1, action2, action3];NSArray *taps = @[tap1, tap2, tap3];UIPreviewActionGroup *group1 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:actions];UIPreviewActionGroup *group2 = [UIPreviewActionGroup actionGroupWithTitle:@"Action Group" style:UIPreviewActionStyleDefault actions:taps];NSArray *group = @[group1,group2];return group;
}
最终结果图如下:
- 关于3DTouch
- 3DTouch
- 3DTouch
- 3DTouch
- [绍棠] 关于iOS9 出的3DTouch 功能Demo
- IOS 3Dtouch
- 3DTouch Demo
- IOS9 3DTouch
- 3DTouch学习笔记
- 3DTouch 基本使用
- IOS开发 3DTouch
- 3DTouch简单实现
- 3DTouch的分享
- 3DTouch的使用
- iOS 3DTouch 开发
- 3Dtouch 基本原理
- 3Dtouch实现
- 3DTouch桌面快捷方式
- 判断节点类型
- 跨App启动Activity,隐式Intent启动,ActivityNotFoundException解决
- centos中进程管理工具
- 文章标题
- 如何将Android源码导入Eclipse中来查看(非常实用)
- 关于3DTouch
- VMware NAT模式虚拟机和主机互ping
- 去除字段中的换行符号
- spark 调度模块详解及源码分析
- 01.EasyUI加入项目
- R语言 RStudio快捷键总结
- LoadRunner性能测试总结
- 敏捷开发(一):介绍
- Android自定义控件-EditText(可用于登陆界面)