闲来无事,突然想学学ios9出的3D touch功能,于是开始网上找资料,看kpi,学习了两个小时,还算有点收获。特此记录一下,方便自己以后复习,方便大家学习一下。
首先,好多人可能不是特别了解3D touch这个功能,其实我的理解就是苹果根据按压的力度给应用的不同的反馈。在图标上按压就是弹出几个快捷的选项,方便用户直接进入应用中的一些功能。其次就是在应用中,用力按压产生预览效果。自己感觉就是这两个主要功能,所以分别学习了一下。注意,这个功能请在6s及以上的真机上测试。
1.首先说一下在桌面上按压图标,弹出列表框这个功能。
创建一个item
UIMutableApplicationShortcutItem *shorcutItem = [[UIMutableApplicationShortcutItemalloc] initWithType:@"111"localizedTitle:@"aaa"];
创建图标
UIApplicationShortcutIcon *icon = [UIApplicationShortcutIconiconWithType:UIApplicationShortcutIconTypeFavorite];
shorcutItem.icon = icon;
设置显示标题
shorcutItem.localizedTitle =@"bbbbbb";
创建第二个item
UIMutableApplicationShortcutItem *shorcutItem2 = [[UIMutableApplicationShortcutItemalloc] initWithType:@"111" localizedTitle:@"aaa"];
创建第二个图标
UIApplicationShortcutIcon *icon2 = [UIApplicationShortcutIconiconWithTemplateImageName:@"about_ipad@2x.png"];
shorcutItem2.icon = icon2;
设置第二个标题
shorcutItem2.localizedTitle =@"ccccccc";
设置子标题
shorcutItem2.localizedSubtitle =@"2222222";
将item给application.shortcutItems赋值
application.shortcutItems =@[shorcutItem,shorcutItem2];
当然有快捷创建方式
UIMutableApplicationShortcutItem *shorcutItem = [[UIMutableApplicationShortcutItem alloc] initWithType:<#(nonnull NSString *)> localizedTitle:<(NSString *)> localizedSubtitle:<(NSString *)> icon:<(UIApplicationShortcutIcon *)> userInfo:<(NSDictionary *)>]
其实现在你按压图标也有弹出框了,但是我点击列表后想进入自己想进入的viewcontroller怎么办,继续找,发现了下边这个方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler{
lcsViewController *viewc = [[lcsViewControlleralloc] init];
[self.window.rootViewControllerpresentViewController:viewc animated:YEScompletion:^{
}];
}
图标的3D touch就到这里,然后说进入应用后的使用。
2.其实进去后的应用方法就比较简单了,在viewcontroller中设置viewcontroller遵守
UIViewControllerPreviewingDelegate代理
然后,在viewDidLoad里注册一个代理
[selfregisterForPreviewingWithDelegate:selfsourceView:self.view];
最后,实现代理中的方法
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
if ([self.presentedViewControllerisKindOfClass:[lcsViewControllerclass]]) {
return nil;
}
lcsViewController *vc = [[lcsViewControlleralloc] init];
return vc;
}
大概就是这样,如果要应用到程序,还需要自己细化一下
效果图: