iOS 3DTouch的使用


 一.3DTouch的主要作用:

 0.demo地址在最下面

 1.Home Screen Quick Actions

 通过长按主屏幕的应用Icon,可以呼出一个3DTouch的菜单,我们可以通过这个菜单进行应用模块的快速定位

 2.Peek Pop

 个人理解主要有

 1.通过3D Touch交互,可以设置除了特定区域之外的视图模糊效果


1

(手机截图 不太清楚)

2.继续深按,将弹出一个预览视图(Peek),并可以通过交互控件(UIPreviewAction)进一步交互


二 实现

1.首先在info.plist文件中设置键值

必填项(下面两个键值是必须设置的):

UIApplicationShortcutItemType 这个键值设置一个快捷通道类型的字符串

UIApplicationShortcutItemTitle 这个键值设置标签的标题

选填项(下面这些键值不是必须设置的):

UIApplicationShortcutItemSubtitle 设置标签的副标题

UIApplicationShortcutItemIconType 设置标签Icon类型

UIApplicationShortcutItemIconFile  设置标签的Icon文件

2.在AppDelegate中didFinishLaunchingWithOptions方法中设置3DTouch的桌面的快捷方式按钮(UIApplicationShortcutItem/UIMutableApplicationShortcutItem)

2

从图中可以看出 UIApplicationShortcutItem的方法有三种,这里我用了第二种方法 

方法参数介绍:

type:个人理解是为每一个item传入一个唯一标识符,后面可以通过这个标示符找到对应的item

localizedTitle:在3DTouch菜单上的标题

localizedSubtitle:子标题

icon:3DTouch菜单中item的图标icon的创建有两种方法,分别创建系统或自定义图片的icon

3
4

然后把创建的item放入数组中,

NSArray *items = @[item1, item2, item3, item4];

[UIApplication sharedApplication].shortcutItems = items;


3.实现- (void)application:(UIApplication *)applicationperformActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItemcompletionHandler:(void (^)(BOOL))completionHandler方法



三 控制器的pop peek

1.首先控制器应遵守UIViewControllerPreviewingDelegate协议,并且先判断当前设备是否支持3DTouch操作 

if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {//3DTouch可用

//注册协议

[self registerForPreviewingWithDelegate:self sourceView:self.view];

}

else {//3DTouch不可用

NSLog(@"3DTouch不可用");

}

 2.实现代理方法

在深按页面的时候会先走- (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location代理方法,在这个方法中我们返回想要预览的控制器(PeekVc)

/** 深按控制器的时候会走该方法 返回想要预览的控制器

@param previewingContext 上下文

@param location 点按的point

@return 返回想要预览的控制器 可以为nil

*/

- (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location {

QRScanStyleListViewController *qrListVc = [[QRScanStyleListViewController alloc] init];

//设置预览时控制器的size

//    qrListVc.preferredContentSize = CGSizeMake(200, 200);

//调整不被虚化的范围,按压的那个cell不被虚化(轻轻按压时周边会被虚化,再少用力展示预览,再加力跳页至设定界面

CGFloat h = 50;

CGFloat y = (self.view.height - h) * 0.5;

CGRect sourceRect = CGRectMake(0, y, self.tableView.width, h);

//sourceRect就是不被虚化的区域

previewingContext.sourceRect = sourceRect;

return qrListVc;

}


在继续点按会触发- (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit代理事件,在这里我们可以实现直接跳转到预览控制器的方法

//继续按压进入:实现该协议 pop(按用点力进入)

- (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {

//跳转到预览控制器

[self showDetailViewController:viewControllerToCommit sender:self];

}

在我们的peekVc里面可以实现- (NSArray> *)previewActionItems方法。来自定义显示预览页面时的按钮

- (NSArray> *)previewActionItems {

// setup a list of preview actions

UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Aciton1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"Aciton1");

}];

UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Aciton2" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"Aciton2");

}];

UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Aciton3" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {

NSLog(@"Aciton3");

}];

NSArray *actions = @[action1,action2,action3];

// and return them (return the array of actions instead to see all items ungrouped)

return actions;

}

效果如下


PS:发现3DTouch出现在主页面的item列表只有四个ShortcutItem  但是我一共创建了五个item 但在显示的时候只会显示前四个ShortcutItem,这点还不太清楚为什么,应该不是最多只能显示4个,因为我看淘宝的话是显示有5个ShortcutItem的

再Ps:评论有人指出了, 系统会自动添加一个 分享xxx 的shortcutItem,所以应该是我们最多创建4个i自定义的tem


demo: https://github.com/lwy121810/Demo3DTouch

文章引用的是项目里的部分,这里的demo是重新写的,部分控件名字可能不一样

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容

  • 1. 3D Touch的主要应用 官方文档给出的应用介绍主要有两块: 1.A user can now press...
    雨润听潮阅读 727评论 0 0
  • 1.简单的介绍一下3D Touch 3D Touch的触控技术,被苹果称为新一代多点触控技术。其实,就是此前在Ap...
    Camille_chen阅读 12,032评论 19 33
  • 1. 3D Touch的主要应用 官方文档给出的应用介绍主要有两块: 1.A user can now press...
    DestinyFighter_阅读 18,680评论 5 50
  • 3D Touch 有两种方式,一种是在按压icon图标出现快捷标签跳转到相应界面,这里的快捷标签最多只能有四个;另...
    杰铭的博客阅读 518评论 0 1
  • full page screen capture fireshot
    AnnQi阅读 234评论 0 0