3D Touch

3D Touch 有两种方式,一种是在按压icon图标出现快捷标签跳转到相应界面,这里的快捷标签最多只能有四个;另一种是在app内实现按压预览,预览图片或文字等。

下面先说第一种3D Touch 方式!这种方式很简单,只需在info.plist文件里添加相应参数就可以了,如下图:

D9F23E35-6514-41DF-B822-6F5BDC61DCDE.png

在info.plist文件的UIApplicationShortcutItems下添加参数:

//这两个为必有项

  • UIApplicationShortcutItemTitle:标签的名字,自己随便取咯!
  • UIApplicationShortcutItemType:标签标识,在application中用到,也是自己随便取的哦!
    //以下为可选项
  • UIApplicationShortcutItemIconType:标签前图标的样式,此为系统图片,也可用下面的自定义图片!
  • UIApplicationShortcutItemSubtitle:标签副标题!
  • UIApplicationShortcutItemIconFile:自定义图片的路径!
  • UIApplicationShortcutItemUserInfo:设置用户信息,是一个字典类型,可以用来传值!

info.plist文件里添加参数
添加完成后就可以运行程序啦!效果如下:

3D Touch_第1张图片
IMG_0609.PNG

(http://upload-images.jianshu.io/upload_images/2455662-bba6ed5447ddaa30.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)运行效果图
当然也可以用代码实现,在application:didFinishLaunchingWithOptions:中添加代码

// 创建标签的ICON图标。 UIApplicationShortcutIcon *icon = [UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch]; // 创建一个标签,并配置相关属性。 UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"com.playmoster.app" localizedTitle:@"play master" localizedSubtitle:nil icon:icon userInfo:nil]; // 将标签添加进Application的shortcutItems中,最多可添加四个哦! [UIApplication sharedApplication].shortcutItems = @[item];

那么点击标签如何进入指定的界面呢,iOS9提供了一个新方法,在ApplicationDelegate中的

- (void)application:(UIApplication *)application performActionForShortcutItem:(nonnull UIApplicationShortcutItem *)shortcutItem completionHandler:(nonnull void (^)(BOOL))completionHandler 方法

if ([shortcutItem.type isEqualToString:@"com.playmoster.app"]) { //跳转到你想要跳转的页面,先跳转到首页,再在首页中处理你的跳转逻辑 ViewController *ctrl = [[ViewController alloc] init]; ctrl.shortcutItemType = 0; UINavigationController *navCtrl = [[UINavigationController alloc]initWithRootViewController:ctrl]; self.window.rootViewController = navCtrl;}
这样就ok了,你的程序就可以实现3D Touch在icon上面的功能了!

下面我们说一下3D Touch的预览功能!

在开始前我们需要在ViewController中添加一个UITableView的首页,如图,这个大家自己随便写一个咯!

3D Touch_第2张图片
Simulator Screen Shot 2016年7月11日 下午4.23.51.png

用来实现3D Touch的UITableView
接下来我们要实现3D Touch的预览功能啦!

第一步、我们要注册3D Touch:这里是在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中注册的。

//代理设为当前界面,sourceView为按压的视图,只要是UIView类型的都可以注册!
[self registerForPreviewingWithDelegate:self sourceView:cell];
} else {
NSLog(@"no support 3D Touch!");
}```

第二步、实现两个代理方法,当压力超过一定值后,会直接跳转到预览界面

```- (UIViewController *)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)location {  
//  初始化预览界面
 SelectViewController *ctrl = [[SelectViewController alloc] init];    
//设定预览界面的大小
ctrl.preferredContentSize = CGSizeMake(0, kScreenHeight);       
//设置未出现预览界面是周边模糊范围,rect为3D touch范围,范围以外为模糊区域
 CGRect rect = CGRectMake(0, 0, kScreenWidth, 44);    
 previewingContext.sourceRect = rect;       
 return ctrl;
}```

```- (void)previewingContext:(id)previewingContext commitViewController:(UIViewController *)viewControllerToCommit {
//跳转到预览界面
[self showViewController:viewControllerToCommit sender:self];
}```

预览效果如图

![IMG_0610.PNG](http://upload-images.jianshu.io/upload_images/2455662-fa792eb79fab46f8.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

想要实现预览图片是上滑出现sheet的功能,只需实现下面几步,以下代码在预览界面实现

```- (NSArrayUIPreviewActionItem>> *)previewActionItems {
// setup a list of preview actions
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"one" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
//添加点击方法
NSLog(@"click one");
}];
UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"two" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
//添加点击方法
NSLog(@"click two");
}];
NSArray *actions = @[action1, action2];
return actions;
}```

若要在点击方法里面实现页面跳转,则需要添加如下方法,注意:appDelegate是在ApplicationDelegate.h 文件中添加类方法

```+ (AppDelegate *)appDelegate;```
在.m文件中实现:

```+ (AppDelegate *)appDelegate {
return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}```

然后才能在预览界面中实现下面的方法

将跳转是用到的self都替换成[self topViewController]即可。

```- (UIViewController*)topViewController {
return [self topViewControllerWithRootViewController:[AppDelegate appDelegate].window.rootViewController];
}
-(UIViewController*)topViewControllerWithRootViewController:(UIViewController*)previewViewController {
if ([previewViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabBarController = (UITabBarController *)previewViewController;
return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
} else if ([previewViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController*)previewViewController;
return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
} else if (previewViewController.presentedViewController) {
UIViewController* presentedViewController = previewViewController.presentedViewController;
return [self topViewControllerWithRootViewController:presentedViewController];
} else {
return previewViewController;
}
}```

效果如下图:

![IMG_0611.PNG](http://upload-images.jianshu.io/upload_images/2455662-6ee0d903f26c7ee5.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

以上就是我所学习的一点3D Touch了,大家看看提点意见哈!!!

你可能感兴趣的:(3D Touch)