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];
共同学习,写下你的评论
评论加载中...
作者其他优质文章