一、 3D touch简单使用,一般开发用到两种情况
1、在app图标上使用3D Touch;
2、在程序内使用3D Touch;
现在说一下第一种在app图标上使用3D Touch
这个一般也有两种方法去实现它
1)首先可以在info.plist 里面添加一些key在里面进行添加items(静态添加)
步骤 : 添加一个key为 'UIApplicationShortcutItems' 数据类型为Array
再在这个刚刚生成的数组里面添加一个item 数据类型为 Dictionary
添加一个Item之后吉给他添加一些关键字(类似属性)一样的东西,下面是属性的解释
UIApplicationShortcutItemType: 快捷可选项的特定字符串(必填)
UIApplicationShortcutItemTitle: 快捷可选项的标题(必填)
UIApplicationShortcutItemSubtitle: 快捷可选项的子标题(可选)
UIApplicationShortcutItemIconType: 快捷可选项的图标(可选)
UIApplicationShortcutItemIconFile: 快捷可选项的自定义图标(可选)
UIApplicationShortcutItemUserInfo: 快捷可选项的附加信息(可选)
好了运行程序就可以看到了,6s 以后的手机才有这个功能,当然还有他的回调方法(也就是响应事件)这个在后面一起讲吧
2)UIApplicationShortcutItem 这个类代表就是icon 下面的代码一般我是放在appdelegate里面
/*
创建item的方法
- (instancetype)initWithType:(NSString *)type localizedTitle:(NSString *)localizedTitle localizedSubtitle:(nullable NSString *)localizedSubtitle icon:(nullable UIApplicationShortcutIcon *)icon userInfo:(nullable NSDictionary *)userInfo;
type: 快捷可选项的特定字符串(必填)
localizedTitle: 快捷可选项的标题(必填)
localizedSubtitle: 快捷可选项的子标题(可选)
icon: 快捷可选项的图标(可选) 这个可以自定义图片,我已经在下面列出来了
userInfo: 快捷可选项的附加信息(可选)
*/
//创建
UIApplicationShortcutItem * item1 = [[UIApplicationShortcutItem alloc]initWithType:@"two" localizedTitle:@"分享1" localizedSubtitle:@"尽情分享吧!1" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare] userInfo:nil];
UIApplicationShortcutItem * item2 = [[UIApplicationShortcutItem alloc]initWithType:@"two" localizedTitle:@"分享2" localizedSubtitle:@"尽情分享吧!2" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare] userInfo:nil];
UIApplicationShortcutItem * item3 = [[UIApplicationShortcutItem alloc]initWithType:@"two" localizedTitle:@"分享3" localizedSubtitle:@"尽情分享吧!3" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"xxx.png"] userInfo:nil];
UIApplicationShortcutItem * item4 = [[UIApplicationShortcutItem alloc]initWithType:@"two" localizedTitle:@"分享4" localizedSubtitle:@"尽情分享吧!4" icon:[UIApplicationShortcutIcon iconWithTemplateImageName:@"xxx.png"] userInfo:nil];
//添加
[UIApplication sharedApplication].shortcutItems = @[item1,item2,item3,item4]
这个是图片类型,我是盗来的,保存看看还行
重点来了 ,点击事件之后,没有回调方法也是不行的
在AppDelegate中 添加
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
这个方法就行了,这个方法也不难,最主要是shortcutItem参数,你点击的信息都在里面
我现在举个例子吧,前面一个AController 中 tableView 的cell空间通过Peek & Pop 进入下一个BController
步骤,在AController 遵守协议<UIViewControllerPreviewingDelegate>
实现下面两个方法
- (void)previewingContext:(id <UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
[self.navigationController pushViewController:viewControllerToCommit animated:YES];
}
再在你 需要使用Peek & Pop 功能的控件中实用这个方法 (我是用cell演示的,所以我放在tableView的代理方法里面)
[self registerForPreviewingWithDelegate:self sourceView:cell];
当进入peek 的时候(也就是小窗口的时候)会回调下面方法
- (nullable UIViewController *)previewingContext:(id <uiviewcontrollerpreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
{
// previewingContext.sourceView: 触发Peek & Pop操作的视图
// previewingContext.sourceRect: 设置触发操作的视图的不被虚化的区域
BController *bVC = [[BController alloc] init];
// 预览区域大小(可不设置)
detailVC.preferredContentSize = CGSizeMake(0, 300);
return detailVC;
}
当进入Pop状态时,系统会回调如下方法
- (void)previewingContext:(id <uiviewcontrollerpreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit
{
[self.navigationController pushViewController:viewControllerToCommit animated:YES];
}
在Peek时希望提供一些快捷选项,需要在DetailViewController中重写previewActionItems的getter方法
- (NSArray<id<uipreviewactionitem>> *)previewActionItems
{
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"选项一" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"选项二" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"选项三" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewActionGroup *actionGroup = [UIPreviewActionGroup actionGroupWithTitle:@"选项组" style:UIPreviewActionStyleDefault actions:@[action1, action2]];
return @[action1, action2, action3, actionGroup];
}