3d touch 和3dquickmold actions的区别

iOS 3D Touch(Home screen quick action && peek、pop) - 简书
iOS 3D Touch(Home screen quick action && peek、pop)
今天工作任务不太紧,研究了一下3D Touch,主要总结了下Home screen quick action 和peep、pop两块。接下来让我一一道来。老规矩,参考的文章会在下面列出来。Home screen quick action(主屏幕快速选项)关于主屏幕快速选项按钮,有两个设置方法,分别为静态添加和动态代码添加。现在先分别列举出各自的实现方法,然后在具体介绍各个参数的含义。静态添加:(info.plist)
静态添加方式
实现效果:
静态添加效果
其实上面每一条列表,对应的就是一个UIApplicationShortcutItem,接下来看一下这个类具体的参数含义:
UIApplicationShortcutItem类
接下来是动态添加:iOS 9之后Application添加了一个属性@property(nullable,nonatomic,copy)NSArray *shortcutItemsNS_AVAILABLE_IOS(9_0)__TVOS_PROHIBITED;这个属性就是用来动态添加主屏幕快速选项的,具体的添加代码为:
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
UIApplicationShortcutIcon*icon1 = [UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypePlay];
UIMutableApplicationShortcutItem*item1 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"666"localizedTitle:@"paly"localizedSubtitle:@"打开"icon:icon1userInfo:nil];
UIApplicationShortcutIcon*icon2 = [UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeShare];
UIMutableApplicationShortcutItem*item2 = [[UIMutableApplicationShortcutItemalloc]initWithType:@"777"localizedTitle:@"share"localizedSubtitle:@"分享"icon:icon2userInfo:nil];
[UIApplicationsharedApplication].shortcutItems=@[item1,item2];
returnYES;
到目前为止,相当于创建了UIButton并添加到了相应地View上面,剩下的就是添加点击回调了。-(void)application:(UIApplication*)applicationperformActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem completionHandler:(void(^)(BOOLsucceeded))completionHandler NS_AVAILABLE_IOS(9_0);通过点击,系统回调如上的方法,返回相应地shortcutItem。接下来就可以根据相应地属性值来做区分进行相应地操作了,如下是打断点获取到的参数详情。
shortcutItem回调值
到这里基本的主屏幕快速选项操作个人认为就差不多了,接下来就是几个需要注意的小坑:1)最多只会显示4个Item,也就是说无论你往数组里面放多少个,都只会显示四个2)当静态,动态两种方法同时存在的时候,会先读取静态添加的Item,然后才会进行动态添加。Peek && pop(预览与跳转)首先借用一下网友对该功能的理解。
现在你可以授权应用的视图控制器来响应用户不同的按压力量。随着用户按压力量的增加,交互会出现三个阶段:
1. 暗示内容预览是可使用的
2. 展示预览(peek),和快捷选项菜单(peek quick actions)
3. 可选的跳转到预览中的视图(pop)
当你使用 peek 和 pop 时,系统通过压力决定从哪个阶段过度至下一个
在App内使用该功能之前,最好先检测一下设备是否支持3D Touch功能,iOS9中添加了UIForceTouchCapability这一属性,可在ViewWillAppear中调用下面方法进行判断,如果设备不支持的话,火蜥可以替换成长按等其他响应手势。if(self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable)另外还可以对手势改变进行监听,如果用户在使用过程中修改了3D Touch设置,则会触发方法回调-(void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection确定了3D Touch功能可用之后,就可以对视图进行注册。- (id)registerForPreviewingWithDelegate:(id)delegate sourceView:(UIView*)sourceView
NS_AVAILABLE_IOS(9_0);在这之后,只要该视图响应了Touch手势,就会触发下面的方法回调,只要在这个方法里返回想要进行预览展示的UIViewController就可以了。- (UIViewController*)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location如果在预览页面向上滑动的话,则会弹出UIPreviewAction,具体的实现应该在所预览的ViewController中实现,-(NSArray&*)previewActionItems,唯一需要注意的是数组中可添加UIPreviewAction 和 UIPreviewActionGroup两种类型的参数。最后,如果在peek的基础上继续用力按压的话,则会触发pop效果,具体的调用方法是-(void)previewingContext:(id)previewingContext commitViewController:(UIViewController*)viewControllerToCommit经过测试测试发现,在该回调方法中,你可以直接对这个该返回VC进行操作,也可以另外创建VC进行弹出操作,具体弹出调用的方法为:[self showViewController:viewControllerToCommit sender:self];到这里应该基本的功能实现就差不多了,其实感觉下面参考文章中总结的更好些,之所以从新总结一遍是想强迫自己把代码从头敲一遍。如果发现上面理解错误的地方请指出,我们一起探讨。参考文章:
有些路很远,走下去会很累。
可是,不走,会后悔。高级(10)
iOS 在6s/6s plus中加入了的3D Touch技术,该技术的功能主要有3个:
1、Home Screen Quick Actions :主屏幕上按icon图标出现快捷选项,然后选择对应选项则会快速进入设定好的页面中
2、提供peek(预览)和pop(详阅、敲击)功能 :启动app之后,可以设置某些页面支持预览和快速回复功能,例如微信点击和某个人的对话就能实现预览
3、iOS9 之后给UITouch对象加入了 压力大小监测的属性force
先讲第一个功能:
有两种发式一种是静态方式、一种是动态方式
静态方式就是在plist文件中配置好,当你的app安装之后就可以使用这个功能
动态方式就是用代码创建,所有必需启动app一次之后才能使用这个功能
由于静态方式方便就直讲静态方式:
在plist文件中配置一些快捷项属性
&key&UIApplicationShortcutItemTitle&/key&
&string&智能开门&/string&
&key&UIApplicationShortcutItemUserInfo&/key&
&key&key1&/key&
&string&value1&/string&
&key&UIApplicationShortcutItemType&/key&
&string&openDoor&/string&
& & & & & & &key&UIApplicationShortcutItemIconFile&/key&
& & & & & & &string&智能开门@2x.png&/string&
&key&UIApplicationShortcutItemTitle&/key&
&string&我要报修&/string&
&key&UIApplicationShortcutItemUserInfo&/key&
&key&key2&/key&
&string&value2&/string&
&key&UIApplicationShortcutItemType&/key&
&string&repair&/string&
&key&UIApplicationShortcutItemIconFile&/key&
&string&在线报修@2x.png&/string&
&key&UIApplicationShortcutItemTitle&/key&
&string&访客邀请&/string&
&key&UIApplicationShortcutItemUserInfo&/key&
&key&key3&/key&
&string&value3&/string&
&key&UIApplicationShortcutItemType&/key&
&string&invite&/string&
&key&UIApplicationShortcutItemIconFile&/key&
&string&访客邀请@2x.png&/string&
&key&UIApplicationShortcutItemTitle&/key&
&string&社区服务&/string&
&key&UIApplicationShortcutItemUserInfo&/key&
&key&key4&/key&
&string&value4&/string&
&key&UIApplicationShortcutItemType&/key&
&string&communityService&/string&
&key&UIApplicationShortcutItemIconFile&/key&
&string&社区服务@2x.png&/string&
UIApplicationShortcutItemType :当点击Icon图标的时候,弹出的选项中每一行设置一个唯一的ID 然后在app里面通过该id判断来确定选择了哪一行(必需有)。
UIApplicationShortcutItemTitle 点击之后弹出的选项中的主标题(必需有)
UIApplicationShortcutItemSubtitle 选项中的副标题。
UIApplicationShortcutItemIconType 利用系统库提供的图标 (UIApplicationShortcutIcon 里面的)。
UIApplicationShortcutItemIconFile 自定义图标,该图标是正方形的、单色的、像素点为35x35,如果这里设置了自定义的图标,设置的UIApplicationShortcutItemIconType属性显示系统图标将不会显示。
UIApplicationShortcutItemUserInfo :是一个字典 用来保存app的版本信息
plist文件配置好之后 上面的效果图就做出来了。
怎么实现点击的那一行对于的功能?
说明:在点击Icon图标快捷项都时候,有两种情况,一种是app没启动,一种是app启动之后在后台挂起的。
第一种情况:app没启动,通过快捷项启动app并跳转到指定的页面
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions&
UIApplicationShortcutItem *shortItem = [launchOptions
objectForKey:UIApplicationLaunchOptionsShortcutItemKey];
& &&if (shortItem !=
// _options是个字典主要是用来传递快捷项的type 然后在页面启动完成了之后,我是在
-(void)viewDidAppear:(BOOL)animated方法里面进行页面跳转的。
& & & & _options = launchO
& & & & return NO;
& & & & //非快捷项启动
& & & & _options =
& & & & return YES;
注意:didFinishLaunchingWithOptions 这个方法要返回NO 避免重复逻辑操作。
第二中情况:app处于后台挂起状态,在代理方法
-(void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void
(^)(BOOL))completionHandler
在这个方法里面发送通知就可以进行页面跳转。
注意:在iOS 9中,一个应用最多能展示四个主屏快速选项。在这个限制下,系统首先展示静态快速选项,以plist菜单中的第一个为首。如果你的静态选项不够四个,并且你也定义了动态快速选项,那么会展示一个或多个动态快速选项。
两种快速选项都可以显示最多两行文本和一个可选的图标。系统会格式化文本,排列包装它,并且适当的添加省略号。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:39027次
排名:千里之外
原创:34篇
(1)(2)(1)(1)(1)(2)(3)(1)(2)(4)(4)(3)(1)(3)(9)(6)(1)3dtouch和现在的屏幕有什么不同【ipadmini2吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:338,045贴子:
3dtouch和现在的屏幕有什么不同收藏
你用苹果自带的那个乐器app也可以体验出来啊,用力按的时候声音会大,轻的时候就声音小,难道这不是压力技术吗,我的iPad和iPhone都可以啊,那和6s有什么不同。
专业回收公司,回收各类废旧机械、废旧金属,空调回收,整厂设备回收
&抱歉.《打扰了 +有iphone的,搜V信( k88app),做任务,每个1-4圆,一天可.上百,绝对赞!?无需任何押`金之类~!+V信 ^_^﹋谢谢~…、~~
为什么就我发帖会沉啊!
帮顶,希望楼主给我一部6s用用,到时才是真实感觉反馈
额                  ——来自iPhone 6 plus (土豪金)128G客端1小时前 济南市齐鲁医院肾脏移植中心213室5号床
帮顶,希望楼主给我一部6s用用,到时才是真实感觉反馈
现在的屏幕感受这种力度,其实方式完全不同,3Dtouch在手放屏幕上之后加重力量屏幕还能感受到,现在的屏幕感受这种力道是一次性的,别问我怎么说的跟真的一样,全是我猜的
ABB IRB2400 机械手-作业精度高、速度快、可靠性强-
沉你麻痹一起嗨
越积累越牛逼
有反馈,按你手指你手指会摸我一下,你说有趣不
3D touch的功能区别就是,普通的屏幕在戴手套或者有水的手指操作不了屏幕。3D touch就是多了个压力感应,就算戴手套或有水都可以操作,因为那是压力屏
登录百度帐号推荐应用3D Touch在iOS9中使用3D Touch
&官方文档 3D touch 地址:
原博客地址请移步:
在iPhone 6s,iPhone 6s Plus,7,7 Plus 中Apple引入了3D Touch技术。3D Touch的触控技术,被苹果称为新一代多点触控技术。其实,就是此前在Apple Watch上采用的Force Touch,屏幕可感应不同的感压力度。
iOS9提供了四类API(Home
Screen Quick Action、UIKit
Peek & Pop&、WebView
Peek & Pop&和UITouch
Force Properties)用于操作3D Touch(Pressure
Sensitivity&、&Peek
and Pop&和&Quick
Actions)。不过无论使用哪一种API,首先需要做的事情是检查3D Touch是否可用。
检测是否支持3D Touch
在iOS9中提供如下的接口用于检查设备是否支持3D Touch:
@property(nonatomic, readonly) UIForceTouchCapability forceTouchC
其中UIForceTouchCapability是一个枚举类型,具体的描述情况如下:
UIForceTouchCapability
UIForceTouchCapabilityUnknown //3D Touch检测失败
UIForceTouchCapabilityUnavailable //3D Touch不可用
UIForceTouchCapabilityAvailable //3D Touch可用
这3个枚举值就是我们来判断设备是否开启3D Touch功能,可以在UIViewController生命周期的viewWillAppear中做如下判断:
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
//do something
当然在生命周期内,如果用户有意修改了设备的3D Touch功能,我们还有一个地方来重新检测:
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
//do something
Home Screen Quick Action
在iPhone 6s或者iPhone 6s Plus上面,当用户按压App的Icon图标的时候,会弹出Quick Action,当用户选择其中的Action的时候,App会启动并实现相应的功能。这一过程相当于在PC上面的右键快捷菜单的功能,如下图所示的效果:
官方文档上指出Xcode7.0以上的模拟器不支持3D Touch,必须使用支持3D Touch的设备(iPhone 6s或者iPhone 6s Plus)进行调试。但是这并不能阻止我们在模拟器上面进行调试,GitHub上面早有大神提供了模拟器调试Quick Action的方法,项目的地址是:/DeskConnect/SBShortcutMenuSimulator。下面简单介绍一下安装的步骤:
git clone /DeskConnect/SBShortcutMenuSimulator.git
cd SBShortcutMenuSimulat
②让SpringBoard支持SBShortcutMenuSimulator
在开启模拟器的情况下,在SBShortcutMenuSimulator目录下面执行如下两行命令:
xcrun simctl spawn booted launchctl debug system/com.apple.SpringBoard --environment DYLD_INSERT_LIBRARIES=$PWD/SBShortcutMenuSimulator.dylib
xcrun simctl spawn booted launchctl stop com.apple.SpringBoard
③预览效果
'com.apple.mobilecal' | nc 127.0.0.1 8000,其中com.apple.mobilecal指的是系统自带的日历的Bundle ID,运行的时候替换成你的应用的Bundle ID即可。
上面的示例图中有四个Action Item,其中每个Action是使用UIApplicationShortcutItem这个对象进行描述的,下面列出每一个UIApplicationShortcutItem中能够包含的信息:
创建Quick Action有两种方式:静态和动态
①以静态方式创建
静态创建的方式是在Info.plist文件中进行声明的
&key&UIApplicationShortcutItems&/key&
&key&UIApplicationShortcutItemType&/key&
&string&com.devzeng.homePage&/string&
&key&UIApplicationShortcutItemTitle&/key&
&string&首页&/string&
&key&UIApplicationShortcutItemSubtitle&/key&
&string&这是首页&/string&
&key&UIApplicationShortcutItemIconFile&/key&
&string&icon_home.png&/string&
&key&UIApplicationShortcutItemUserInfo&/key&
&key&scheme&/key&
&string&devzeng://home&/string&
&key&UIApplicationShortcutItemType&/key&
&string&com.devzeng.about&/string&
&key&UIApplicationShortcutItemTitle&/key&
&string&关于我们&/string&
&key&UIApplicationShortcutItemSubtitle&/key&
&string&这是关于我们&/string&
&key&UIApplicationShortcutItemIconFile&/key&
&string&icon_about.png&/string&
&key&UIApplicationShortcutItemUserInfo&/key&
&key&scheme&/key&
&string&devzeng://about&/string&
②以动态方式创建
动态创建是在程序初始化的时候用代码动态添加。UIApplication对象多了一个支持快捷方式的数组(shortcutItems),
如果需要增加快捷方式,可以赋值给shortcutItems属性。
@property(nonatomic, copy) NSArray &UIApplicationShortcutItem *& *shortcutI
示例代码如下:
//创建ShortcutItem
UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@&icon_register.png&];//创建快捷item的icon即UIApplicationShortcutItemIconFile
NSDictionary *info1 = @{@&scheme&:@&devzeng://register&};//创建快捷item的userinfo即UIApplicationShortcutItemUserInfo
UIMutableApplicationShortcutItem *item1 = [[UIMutableApplicationShortcutItem alloc] initWithType:@&com.devzeng.registerPage& localizedTitle:@&注册& localizedSubtitle:@&注册新用户& icon:icon1 userInfo:info1];
//创建ShortcutItem
UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIcon iconWithTemplateImageName:@&icon_shop.png&];
NSDictionary *info2 = @{@&scheme&:@&devzeng://shop&};
UIMutableApplicationShortcutItem *item2 = [[UIMutableApplicationShortcutItem alloc] initWithType:@&com.devzeng.shopPage& localizedTitle:@&购物车& localizedSubtitle:@&查看购物车& icon:icon2 userInfo:info2];
//创建ShortcutItem
UIApplicationShortcutIcon *icon3 = [UIApplicationShortcutIcon iconWithTemplateImageName:@&icon_help.png&];
NSDictionary *info3 = @{@&scheme&:@&devzeng://help&};
UIMutableApplicationShortcutItem *item3 = [[UIMutableApplicationShortcutItem alloc] initWithType:@&com.devzeng.helpPage& localizedTitle:@&帮助& localizedSubtitle:@&帮助手册& icon:icon3 userInfo:info3];
//注册ShortcutItem
[UIApplication sharedApplication].shortcutItems =
1)系统限制每个App最多能够显示4个Action Item,其中包括静态方式和动态方式进行创建的;
2)如果静态和动态方式同时使用的时候,给UIApplication的shortcutItems赋值的时候不会覆盖
当app在后台的时候UIApplication提供了一个回调方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler NS_AVAILABLE_IOS(9_0);
我们依据这个回调中的shortcutItem的type和userinfo来做出不同的事件处理,而最后的completionHandler在API的说明中我们看到当应用并非在后台,而是直接重新开进程的时候,直接返回No,那么这个时候,我们的回调会放在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
UIApplication又给我们一个从launchOptions中获取这个shortcutItem的key(UIApplicationLaunchOptionsShortcutItemKey)
UIApplicationShortcutItem *item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
//根据不同的Action响应不同的事件
在performActionForShortcutItem回调中
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void(^)(BOOL succeeded))completionHandler {
if (shortcutItem) {
//根据不同的Action响应不同的事件
if (completionHandler) {
completionHandler(YES);
UIKit Peek & Pop
Peek和Pop手势给了iOS9用户预览和体验内容的全新方法。iPhone6s/iPhone6s Plus可通过用户触摸力度感知需求,并给出更加丰富的操作选项。目前这项功能已经在邮件、照片、日历等应用中启用。
根据苹果的介绍,Peek手势允许用户通过短时间按压屏幕进行操作,可在邮件、照片等应用弹出全新功能菜单,给出预览内容。如果按压力度加大,则是Pop手势功能,会让被点击内容完全呈现,这些内容可以是文字、图像、网页以及其他各种内容。简单来说,Peek专注于预览,Pop可以全面展现内容。
1、检测3D Touch是否可用,如果可用就注册
- (void)check3DTouchAvailable {
// 如果开启了3D touch,注册
if (self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable) {
[self registerForPreviewingWithDelegate:(id)self sourceView:_label];
2、实现UIViewControllerPreviewingDelegate的Protocol
①Peek手势相关处理:
- (UIViewController *)previewingContext:(id&UIViewControllerPreviewing&)context viewControllerForLocation:(CGPoint)point {
//防止重复加入
if ([self.presentedViewController isKindOfClass:[PeekDemoViewController class]]){
PeekDemoViewController *peekViewController = [[PeekDemoViewController alloc] init];
return peekViewC
在PeekDemoViewController中添加previewActionItems:
- (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:@&Tap Group& style:UIPreviewActionStyleDefault actions:taps];
NSArray *group = @[group1,group2];
②Pop手势相关处理:
- (void)previewingContext:(id&UIViewControllerPreviewing&)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
PopDemoViewController *popViewController = [[PopDemoViewController alloc] init];
[self showViewController:popViewController sender:self];
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:71236次
积分:1392
积分:1392
排名:千里之外
原创:59篇
转载:44篇
(4)(1)(2)(3)(1)(5)(4)(18)(7)(5)(16)(12)(12)(12)(1)

我要回帖

更多关于 quick actions 的文章

 

随机推荐