为了账号安全,请及时绑定邮箱和手机立即绑定

iOS开发教程之3D Touch

   3D Touch的触控技术,被苹果称为新一代多点触控技术。随着这项技术的出现,iOS开发者们为了行业需求也进行了新技术的攻关。3D Touch包含三大模块:peek and pop、Home Screen Quick Actions、Force Properties。这里进行一下Home Screen Quick Actions和peek and pop在实际开发中简单实现。       注:在xcode7以上都可以支持3D touch的开发,正常情况下在模拟器上是不能进行调试,但是可以通过

    实现在模拟器上调试 Home screen quick actions,但是对于其他两个模块只能在真机上调试。  1.Home Screen Quick Actions即在主屏幕按压应用图标快速获取到进入应用某些功能的菜单      3D Touch快速入口标签有两种添加方式:一种是静态添加,在工程中的info.plist文件中添加相关标签选项,通过这种方式添加的标签选项,在App第一次运行前,就可以唤出这些标签选项;另一种是动态添加,通过代码给App添加快速入口。这种方式添加的标签选项,第一次运行App前是看不到这些标签选项的,必须先运行一次App,以后就可以唤出这些标签选项了。  (1)静态添加入口标签:我们需要在info.plist中添加如下信息:

   设置后在真机(iPhone6S或者6sPlus)上运行程序,运行成功后,退出程序,按压应用图标,就会有相应的效果。如果想添加多个标签,可在Item 0下边按照上述标准继续添加Item1,Item2,Item3等(最多四个)。

(2)动态添加入口标签:动态添加入口标签就是通过代码来实现。  在工程的viewDidLoad方法中创建标签的Icon图标;然后再创建一个标签并配置相关属性;然后将标签添加到Application的shortcutItems中。具体实现如下: //3D Touch  //创建标签icon图标  UIApplicationShortcutIcon * icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd]; //创建一个标签并设置相关属性  UIApplicationShortcutItem * item = [[UIApplicationShortcutItem alloc] initWithType:@"2" localizedTitle:@"主标题2" localizedSubtitle:@"副标题2" icon:icon userInfo:nil];  //将标签添加到UIApplication的shortcutItems数组中  [UIApplication sharedApplication].shortcutItems = @[item];      这样,再次测试,运行程序后,退出后,按压应用图标,弹出框由之前的一个变成两个。 

    上述代码首先是创建标签入口,这一步与设置info.plist中 UIApplicationShortcutItemIconType的效果是相同的。同时系统还为我们提供了不同样式的标签。如下:  typedef NS_ENUM(NSInteger, UIApplicationShortcutIconType) { UIApplicationShortcutIconTypeCompose, UIApplicationShortcutIconTypePlay, UIApplicationShortcutIconTypePause, UIApplicationShortcutIconTypeAdd, UIApplicationShortcutIconTypeLocation, UIApplicationShortcutIconTypeSearch, UIApplicationShortcutIconTypeShare,  UIApplicationShortcutIconTypeProhibit       NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeContact        NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeHome           NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMarkLocation   NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeFavorite       NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeLove           NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCloud          NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeInvitation     NS_ENUM_AVAILABLE_IOS(9_1)UIApplicationShortcutIconTypeConfirmation NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMail      NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeMessage    NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeDate      NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTime      NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCapturePhoto   NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeCaptureVideo   NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTask      NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeTaskCompleted  NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeAlarm       NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeBookmark     NS_ENUM_AVAILABLE_IOS(9_1), UIApplicationShortcutIconTypeShuffle     NS_ENUM_AVAILABLE_IOS(9_1),  UIApplicationShortcutIconTypeAudio     NS_ENUM_AVAILABLE_IOS(9_1),  UIApplicationShortcutIconTypeUpdate     NS_ENUM_AVAILABLE_IOS(9_1) } NS_ENUM_AVAILABLE_IOS(9_0) __TVOS_PROHIBITED;     
    完成以上步骤之后,相当于日常开发中创建了UIButton并添加到了相应地View上面,剩下的就是添加点击回调了,也就是说通过检测用户以哪种方式进入的应用,并且根据不同的方式确定不同的响应。 

iOS9在AppDelegated中提供了一个新方法: - (void)application:(UIApplication )application performActionForShortcutItem:(UIApplicationShortcutItem )shortcutItem completionHandler:(void (^)(BOOL))completionHandler;

如果应用是从3D Touch快速入口启动的,则会执行这个方法。该方法的shortcutItem参数携带了从快速入口进入应用时的标签参数。我们可以在这个方法里判断shortcutItem.localizedTitle属性的值来判断是从哪一个标签进入的应用。
注意事项:
1)最多只会显示4个Item,也就是说无论你往数组里面放多少个,都只会显示四个;
2)当静态,动态两种方法同时存在的时候,会先读取静态添加的Item,然后才会进行动态添加。

    2.Peek and Pop(预览与跳转) 交互过程分为三个步骤:  

(1)轻压UI元素,周围界面变模糊,提示用户3D Touch中peek可用;
(2)深按一会,会弹出该元素的预览视图;
(3)再用力按住,即可全部进入视图;若视图上有交互控件,通过向上滑动,可以进一步操作。

在开发过程中,想要在App内使用该功能之前,应该先检测一下设备是否支持3D Touch功能,iOS9中添加了UIForceTouchCapability这一属性,可在ViewWillAppear中调用下面方法进行判断,如果设备不支持的话,可以替换成长按等其他响应手势。

if(self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable){ };
另外还可以对手势改变进行监听,如果用户在使用过程中修改了3D Touch设置,则会触发方法回调 -(void)traitCollectionDidChange:(UITraitCollection)previousTraitCollection;
确定了3D Touch功能可用之后,就可以对视图进行注册。 - (id)registerForPreviewingWithDelegate:(id)delegate;
在这之后,只要该视图响应了Touch手势,就会触发下面的方法回调,只要在这个方法里返回想要进行预览展示的UIViewController就可以了。 - (UIViewController
)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location;
如果在预览页面向上滑动的话,则会弹出UIPreviewAction,具体的实现应该在所预览的ViewController中实现,-(NSArray<id<UIPreviewActionItem>>)previewActionItems,需要注意的是数组中可添加UIPreviewAction 和 UIPreviewActionGroup两种类型的参数。
最后,如果在peek的基础上继续用力按压的话,则会触发pop效果,具体的调用方法是 -(void)previewingContext:(id)previewingContext commitViewController:(UIViewController
)viewControllerToCommit;
经过测试测试发现,在该回调方法中,我们可以直接对这个返回ViewController进行操作,也可以另外创建ViewController进行弹出操作,具体弹出调用的方法为: [self showViewController:viewControllerToCommit sender:self];

点击查看更多内容
2人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消